+++ /dev/null
-# Mouserc - Mouse bindings for Openbox
-
-# Context : The place where the mouse click takes place
-# * Titlebar - A client's titlebar (the top of the frame)
-# * Handle - A client's handle (the bottom of the frame)
-# * Client - A client (the actual window inside the frame, clicks in this
-# context also get passed through to the client)
-# * Frame - A client's entire frame (clicks in this context do not get passed
-# through to the client)
-# * Icon - A client's icon (in the titlebar)
-# * AllDesktops - A client's omnipresent button (in the titlebar)
-# * Iconify - A client's iconify button (in the titlebar)
-# * Shade - A client's shade button (in the titlebar)
-# * Maximize - A client's maximize button (in the titlebar)
-# * Close - A client's close button (in the titlebar)
-# * Root - The root window (the desktop background, these are often blocked
-# by programs with desktop windows, and are not
-# available on rootless X servers (like OSX))
-# * TLCorner - The top-left corner of the frame (if supported by the
-# engine)
-# * TRCorner - The top-right corner of the frame (if supported by the
-# engine)
-# * BLCorner - The bottom-left corner of the frame (if supported by the
-# engine)
-# * BRCorner - The bottom-right corner of the frame (if supported by the
-# engine)
-# Other contexts may be created by engines.
-
-# Event : The type of mouse action to bind
-# * Press - A button is pressed
-# * Release - A button is released
-# * Click - A button is pressed and released
-# * DoubleClick - A button is pressed and released twice quickly
-# * Drag - A button is held and the mouse is moved
-
-# Button : The mouse button which is performing the Event
-# A string composed of [<modifier>-]<button>. A button can have 0 or more
-# modifiers.
-# Valid modifiers are Mod1 ('A' is an alias for this), Mod2, Mod3, Mod4 ('W'
-# is an alias for this), and Mod5.
-# Valid buttons are Left, Right, Middle, Up, Down, or any number > 0
-
-# Action: The action to be performed then the Event occurs with the Button in
-# the context.
-#
-# For all Events *except* for drag Events, these are valid:
-# * Focus - Focus the client
-# * Unfocus - Unfocus the client
-# * Iconify - Iconify the client
-# * Raise - Raise the client to the front
-# * Lower - Lower the client to the back
-# * FocusRaise - Focus the client and raise the client to the front
-# * Close - Close the client
-# * Kill - Kill the client forcefully
-# * Shade - Shade (roll up) the client
-# * Unshade - Unshade (roll down) the client
-# * ToggleShade - Shade and unshade the client
-# * ShadeLower - Shades the window if it's not shaded, and lower it
-# if it was already shaded
-# * UnshadeRaise - Unshades the window if it's shaded, and raise it
-# if it was already unshaded
-# * ToggleOmnipresent - Place the client on all desktops or the current one
-# * MaximizeFull - Maximize the window horizontally and vertically
-# * UnmaximizeFull - Restore the window horizontally and vertically
-# * ToggleMaximizeFull - Maximize or restore the window horizontally and
-# vertically
-# * MaximizeHorz - Maximize the window horizontally
-# * UnmaximizeHorz - Restore the window horizontally
-# * ToggleMaximizeHorz - Maximize or restore the window horizontally
-# * MaximizeVert - Maximize the window vertically
-# * UnmaximizeVert - Restore the window vertically
-# * ToggleMaximizeVert - Maximize or restore the window vertically
-# * SendToNextDesktop - Sends the window to the next desktop
-# * SendToNextDesktopWrap - Sends the window to the next desktop (wrapping
-# around the first and last desktops)
-# * SendToPreviousDesktop - Sends the window to the previous desktop
-# * SendToPreviousDesktopWrap - Sends the window to the previous desktop
-# (wrapping around the first and last desktops)
-# * NextDesktop - Switches to the next desktop
-# * NextDesktopWrap - Switches to the next desktop (wrapping around the first
-# and last desktops)
-# * PreviousDesktop - Switches to the previous desktop
-# * PreviousDesktopWrap - Switches to the previous desktop (wrapping around
-# the first and last desktops)
-# * NextDesktopColumn - Switches to the desktop in the next column, based on
-# the desktop layout set by a pager
-# * NextDesktopColumnWrap - Switches to the desktop in the next column, based
-# on the desktop layout set by a pager (wrapping
-# around the first and last columns)
-# * PreviousDesktopColumn - Switches to the desktop in the previous column,
-# based on the desktop layout set by a pager
-# * PreviousDesktopColumnWrap - Switches to the desktop in the previous
-# column, based on the desktop layout set by a
-# pager (wrapping around the first and last
-# columns)
-# * NextDesktopRow - Switches to the desktop in the next row, based on the
-# desktop layout set by a pager
-# * NextDesktopRowWrap - Switches to the desktop in the next row, based on the
-# desktop layout set by a pager (wrapping around the
-# first and last rows)
-# * PreviousDesktopRow - Switches to the desktop in the previous row, based on
-# the desktop layout set by a pager
-# * PreviousDesktopRowWrap - Switches to the desktop in the previous row,
-# based on the desktop layout set by a pager
-# (wrapping around the first and last rows)
-# * ToggleDecorations - Toggles all decorations around a window on and off
-# * Restart - Restarts Openbox
-# * Exit - Exits Openbox
-#
-# For drag Events only, these are valid:
-# * Move - Move the client interactively, this can only be bound to the Drag
-# Event
-# * Resize - Resize the client interactively, this can only be bound to the
-# Drag Event
-
-# All options are case insensitive.
-
-#Context Event Button Action
-
-Titlebar Drag Left Move
-Handle Drag Left Move
-Frame Drag A-Left Move
-
-BLCorner Drag Left Resize
-BRCorner Drag Left Resize
-Frame Drag A-Right Resize
-
-Titlebar Click Left Raise
-Titlebar Press Middle Lower
-Handle Click Left Raise
-Handle Press Middle Lower
-Frame Click A-Left Raise
-Frame Click A-Right Lower
-
-Titlebar Press Left Focus
-Handle Press Left Focus
-BLCorner Press Left Focus
-BRCorner Press Left Focus
-Client Press Left Focus
-Client Press Middle Focus
-
-Titlebar DoubleClick Left ToggleShade
-Titlebar Click Up Shade
-Titlebar Click Down UnShade
-
-Maximize Click Left ToggleMaximizeFull
-Maximize Click Middle ToggleMaximizeVert
-Maximize Click Right ToggleMaximizeHorz
-Iconify Click Left Iconify
-Icon DoubleClick Left Close
-Close Click Left Close
-Close Click Middle Kill
-AllDesktops Click Left ToggleOmnipresent
-Shade Click Left ToggleShade
-
-Root Click Up NextDesktopWrap
-Root Click Down PreviousDesktopWrap
-Root Click A-Up NextDesktopWrap
-Root Click A-Down PreviousDesktopWrap
-Frame Click A-Up NextDesktopWrap
-Frame Click A-Down PreviousDesktopWrap
-Frame Click C-A-Up SendToNextDesktopWrap
-Frame Click C-A-Down SendToPreviousDesktopWrap
+++ /dev/null
-%{
-#include "mouse.h"
-#include <glib.h>
-#ifdef HAVE_STDIO_H
-# include <stdio.h>
-#endif
-
-static int lineno;
-static char *path;
-static gboolean error;
-
-static char *context;
-static char *event;
-static char *button;
-static char *action;
-
-static void endofline();
-static int mparsewrap();
-static void gotfield();
-static void addbinding();
-%}
-
-field [A-Za-z0-9][-A-Za-z0-9]*
-white [ \t]*
-
-%%
-
-^{white}#.*\n lineno++;
-{field} gotfield();
-\n endofline();
-[ \t]
-. error = TRUE;
-
-%%
-
-static void gotfield()
-{
- if (context == NULL)
- context = g_strdup(mparsetext);
- else if (event == NULL)
- event = g_strdup(mparsetext);
- else if (button == NULL)
- button = g_strdup(mparsetext);
- else if (action == NULL)
- action = g_strdup(mparsetext);
- else
- error = TRUE;
-}
-
-static void endofline()
-{
- if (!error && context && event && button && action)
- addbinding();
- else if (error || context || event || button || action)
- g_warning("Parser error in '%s' on line %d", path, lineno);
-
- error = FALSE;
- g_free(context); g_free(event); g_free(button); g_free(action);
- context = event = button = action = NULL;
-
- ++lineno;
-}
-
-static void addbinding()
-{
- Action *a = NULL;
- MouseAction mact;
-
- if (!g_ascii_strcasecmp(event, "press"))
- mact = MouseAction_Press;
- else if (!g_ascii_strcasecmp(event, "release"))
- mact = MouseAction_Release;
- else if (!g_ascii_strcasecmp(event, "click"))
- mact = MouseAction_Click;
- else if (!g_ascii_strcasecmp(event, "doubleclick"))
- mact = MouseAction_DClick;
- else if (!g_ascii_strcasecmp(event, "drag"))
- mact = MouseAction_Motion;
- else {
- g_warning("Invalid event '%s' in '%s' on line %d", event, path,
- lineno);
- return;
- }
-
- a = action_from_string(action);
-
- if (mact == MouseAction_Motion) {
- if (a && !(a->func == action_move || a->func == action_resize)) {
- action_free(a);
- a = NULL;
- }
- /* the below types cannot be used with !motion events, or at all with
- mouse bindings */
- } else if (a && (a->func == action_move || a->func == action_resize ||
- a->func == action_execute || a->func == action_desktop ||
- a->func == action_move_relative_horz ||
- a->func == action_move_relative_vert ||
- a->func == action_resize_relative_horz ||
- a->func == action_resize_relative_vert)) {
- action_free(a);
- a = NULL;
- }
- if (a == NULL) {
- g_warning("Invalid action '%s' in '%s' on line %d", action, path,
- lineno);
- return;
- }
-
- if (!mbind(button, context, mact, a)) {
- action_free(a);
- g_warning("Unable to add binding '%s %s %s %s'",
- context, event, button, action);
- }
-}
-
-
-static int mparsewrap()
-{
- g_free(context); g_free(event); g_free(button); g_free(action);
- return 1;
-}
-
-void mouserc_parse()
-{
- path = g_build_filename(g_get_home_dir(), ".openbox", "mouserc", NULL);
- if ((mparsein = fopen(path, "r")) == NULL) {
- g_free(path);
- path = g_build_filename(RCDIR, "mouserc", NULL);
- if ((mparsein = fopen(path, "r")) == NULL) {
- g_warning("No mouserc file found!");
- g_free(path);
- return;
- }
- }
-
- lineno = 1;
- error = FALSE;
- context = event = button = action = NULL;
-
- mparselex();
-
- g_free(path);
-}