+3.4.7-pre1:
+ * Updated Czech, Chinese, Dutch, Swedish, Finnish and Spanish translations
+ * Add an example of the "force" option for the per-app placement options to
+ the default rc.xml file
+ * Add a new xdg-autostart script. This will eventually end up in the PyXDG
+ distribution hopefully, but it is included in Openbox for now. This script
+ runs things based on the freedesktop.org autostart specification. You can
+ have it run GNOME, KDE, ROX, or XFCE specific things if you want. The
+ new default system-wide autostart.sh script runs it automatically
+ * Update the default menu.xml to include a lot of common apps
+ * Fix white font shadows (negative shadowtint)
+ * Update the autostart.sh to find gnome-settings-daemon correctly, as the
+ GNOME people have moved it to libexec
+ * Fix focus possibly getting stolen when using the Focus action
+ * Drastically speed up rendering of Vertical and SplitVertical gradients
+ * Speed improvements also for Horizonal and Pyramid gradients
+ * Add new theme options, menu.overlap.x and menu.overlap.y options, that let
+ you independently control the horizontal and vertical position of submenus
+ * Change _NET_ACTIVE_WINDOW messages to not change the current desktop, but
+ to bring the window to the current desktop instead. This is the industry
+ standard policy
+ * Use the pretty new openbox.png icon as the default window icon
+ * Allow matching per-application rules to windows by their window type
+ (normal, dialog, splash, etc). The default rc.xml has more details
+ * Add new Openbox-themed prompt windows. Use these prompt windows to ask
+ before killing off windows that aren't responding. This also means we
+ don't need to ping every window constantly forever
+ * Add a new <prompt> option to the Execute action. If this is set to a
+ string, a dialog will be shown with that string in it and "yes"/"no"
+ buttons. The command to be executed will only be run if the user selects
+ "yes" in the dialog
+ * Add a new <prompt> option to the Exit action, which is a boolean (not a
+ string). When true, Openbox will show a dialog confirming if you want to
+ exit
+ * Reduce Openbox's memory footprint and speed up rendering through the use
+ of a new icon cache, so that Openbox only needs to keep 1 copy of an icon
+ when 100 different windows share it
+ * Make Openbox menus have the "menu type" hint for compositors to see and use
+ * Fix actions so that key presses will not be lost between running the
+ ShowMenu action and the menu appearing
+ * Fix the MoveResizeTo action for negative coords (opposite edges)
+ * Fix key bindings getting lost if multiple bindings at the same level could
+ not be translated (Fixes VMWare causing Openbox keybindings to stop
+ working)
+ * Fix the resize popup box for terminal windows with a base size of 0 (show
+ the right size values for urxvt terminals)
+ * Fix some off-by-one bugs with the edge growing/shrinking code
+ * Add new theme options for menu line separators: menu.separator.color,
+ menu.separator.width, menu.separator.padding.width,
+ menu.separator.padding.height
+ * Add xfce-mcs-manager to the default autostart.sh, and run it automatically
+ when gnome-settings-daemon is not present to have GTK apps inherit settings
+ from the XFCE configuration tools
+ * Make the send-to-desktop menu in the client-menu indicate which is the current
+ desktop for omnipresent windows, and don't close it if just toggling
+ omni-presence when ctrl-clicking
+
+3.4.6.1:
+ * Updated Clearlooks theme
+ * Add the force="yes/no" option for the per-app settings' <position> tag
+ * Raise and focus modal children and their direct parents together, improved
+ usability with direct modal transient windows
+ * Fix crash when using <raise> for NextWindow and there are no windows
+ to move focus to
+ * Add the <manageDesktops> option in the rc.xml <menu> section, which toggles
+ the "Manage Desktops" section appearing in the combined-client-list-menu
+ * Fix for menu headers showing the wrong text
+ * Fix for the <focusLast> behavior
+ * Treat modal direct children as one window with their parent consistently
+
+3.4.6:
+ * Added Basque translation
+ * Updated French, Vietnamese German, Simplified Chinese, Russian, Portuguese,
+ Brasilian Portuguese, Norwegian, and Finnish translations
+ * New Clearlooks theme, updated by David Barr
+ * Updated the previous Clearlooks theme, and renamed it to Clearlooks-3.4
+ * Allow dialog type windows to go fullscreen (Fixes Kpdf)
+ * Remove the extraneous top border for undecorated windows while maximized
+ * Fixes for keyboard modifiers (Alt-tab dialog getting stuck on screen for
+ some users)
+ * Automatically catch changes to the keyboard map and reconfigure the key
+ bindings on the fly
+ * Fix focus moving incorrectly sometimes with focus under mouse enabled
+ * Make default configuration focus the desktop when you right click
+ * Add the <bar> and <raise> options for all window cycling actions, allowing
+ you to have your target window temporarily raised above all others, and to
+ turn the focus target indicator bar off
+ * Improve the LastDesktop action to not remember desktops you skipped across
+ * Ignore mouse clicks that are made on override-redirect (unmanaged) windows
+ * When opening a menu with a key binding, don't use the key binding to run
+ something in the menu
+ * Add a <monitor> option for window placement, which gives you the option
+ to place new windows on the active monitor, or the monitor where the mouse
+ is, instead of on any monitor (for xinerama multihead setups)
+ * Add options for placing the window move/resize coordinate popup window in
+ a fixed position on screen, rather than relative to the window being
+ moved or resized
+ * Prevent the dock from auto-hiding completely offscreen if the theme has
+ no borders for it
+ * New icon
+ * Fix race condition when running things that want to grab the keyboard
+ (e.g. gnome-panel-control --main-menu)
+ * When dialog windows ask to not appear in the taskbar, still give them focus
+ in normal ways (fixes new GNOME session logout dialogs)
+ * Fix bug with resizing corners on certain parts of the window frame
+ * Ping applications to tell when they are running or have become frozen.
+ Show a [Not Responding] message in the title bar of windows which are
+ frozen.
+ * When closing a window which is [Not Responding], kill the window's process
+ if it is running on the same machine as Openbox. Otherwise, just
+ disconnect
+ the window from the X display. A second attempt to close a [Not
+ Responding]
+ window will kill it forcefully (kill -9).
+ * Fixes for internal timers
+ * Add a <wmclass> option for the execute action's startup-notification. This
+ lets you tell Openbox that the application will map a window with the
+ specified class - for applications that do not support startup-notification
+ natively.
+ * Fix for empty dock taking up space onscreen after a reconfigure
+ * Reduce Openbox's additional memory footprint per-window and per-menu
+ * Faster horizontal gradient rendering
+ * Don't deiconify windows that aren't allowed to be directly iconified on
+ restart (eg toolbars), as they can be iconified by other means
+ * Improve support for fullscreen windows in xinerama (TwinView) and
+ multiple-screen setups
+ * Add a --config-file command line option, to specify an alternate
+ configuration file path
+
+3.4.5:
+ * Added Hungarian translation
+ * Updated Finnish, Russian, German and French translations
+ * Fixed some very minor memory leaks
+ * Hide the desktop popup when showing the focus popup
+ * Fix a crash when trying to access the More... menu of
+ client-list-combined-menu
+ * Fix the coordinate popup only showing up on the first monitor in xinerama
+ * Add --exit to exit the currently running openbox instance
+
3.4.4:
* Updated Traditional Chinese translation
* Updated Norwegian translation
openbox/actions/fullscreen.c \
openbox/actions/growtoedge.c \
openbox/actions/iconify.c \
- openbox/actions/if.c \
openbox/actions/kill.c \
openbox/actions/layer.c \
openbox/actions/session.c \
openbox/actions/resizerelative.c \
openbox/actions/restart.c \
openbox/actions/shade.c \
+ openbox/actions/shadelowerraise.c \
openbox/actions/showdesktop.c \
openbox/actions/showmenu.c \
openbox/actions/unfocus.c \
AC_PREREQ([2.54])
-AC_INIT([openbox], [3.999.0], [http://bugzilla.icculus.org])
+AC_INIT([openbox], [3.4.7-pre1], [http://bugzilla.icculus.org])
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([openbox/openbox.c])
dnl
OB_MAJOR_VERSION=3
OB_MINOR_VERSION=4
-OB_MICRO_VERSION=16
+OB_MICRO_VERSION=21
OB_INTERFACE_AGE=0
OB_BINARY_AGE=0
OB_VERSION=$OB_MAJOR_VERSION.$OB_MINOR_VERSION
<!-- Keybindings for desktop switching -->
<keybind key="C-A-Left">
- <action name="GoToDesktop"><to>left</to><wrap>no</wrap></action>
+ <action name="DesktopLeft"><dialog>no</dialog><wrap>no</wrap></action>
</keybind>
<keybind key="C-A-Right">
- <action name="GoToDesktop"><to>right</to><wrap>no</wrap></action>
+ <action name="DesktopRight"><dialog>no</dialog><wrap>no</wrap></action>
</keybind>
<keybind key="C-A-Up">
- <action name="GoToDesktop"><to>up</to><wrap>no</wrap></action>
+ <action name="DesktopUp"><dialog>no</dialog><wrap>no</wrap></action>
</keybind>
<keybind key="C-A-Down">
- <action name="GoToDesktop"><to>down</to><wrap>no</wrap></action>
+ <action name="DesktopDown"><dialog>no</dialog><wrap>no</wrap></action>
</keybind>
<keybind key="S-A-Left">
- <action name="SendToDesktop"><to>left</to><wrap>no</wrap></action>
+ <action name="SendToDesktopLeft"><dialog>no</dialog><wrap>no</wrap></action>
</keybind>
<keybind key="S-A-Right">
- <action name="SendToDesktop"><to>right</to><wrap>no</wrap></action>
+ <action name="SendToDesktopRight"><dialog>no</dialog><wrap>no</wrap></action>
</keybind>
<keybind key="S-A-Up">
- <action name="SendToDesktop"><to>up</to><wrap>no</wrap></action>
+ <action name="SendToDesktopUp"><dialog>no</dialog><wrap>no</wrap></action>
</keybind>
<keybind key="S-A-Down">
- <action name="SendToDesktop"><to>down</to><wrap>no</wrap></action>
+ <action name="SendToDesktopDown"><dialog>no</dialog><wrap>no</wrap></action>
</keybind>
<keybind key="W-F1">
- <action name="GoToDesktop"><to>1</to></action>
+ <action name="Desktop"><desktop>1</desktop></action>
</keybind>
<keybind key="W-F2">
- <action name="GoToDesktop"><to>2</to></action>
+ <action name="Desktop"><desktop>2</desktop></action>
</keybind>
<keybind key="W-F3">
- <action name="GoToDesktop"><to>3</to></action>
+ <action name="Desktop"><desktop>3</desktop></action>
</keybind>
<keybind key="W-F4">
- <action name="GoToDesktop"><to>4</to></action>
+ <action name="Desktop"><desktop>4</desktop></action>
</keybind>
<keybind key="W-d">
<action name="ToggleShowDesktop"/>
<!-- Keybindings for window switching -->
<keybind key="A-Tab">
- <action name="NextWindow">
- <finalactions>
- <action name="Focus"/>
- <action name="Raise"/>
- <action name="Unshade"/>
- </finalactions>
- </action>
+ <action name="NextWindow"/>
</keybind>
<keybind key="A-S-Tab">
- <action name="PreviousWindow">
- <finalactions>
- <action name="Focus"/>
- <action name="Raise"/>
- <action name="Unshade"/>
- </finalactions>
- </action>
+ <action name="PreviousWindow"/>
</keybind>
<keybind key="C-A-Tab">
<action name="NextWindow">
<panels>yes</panels><desktop>yes</desktop>
- <finalactions>
- <action name="Focus"/>
- <action name="Raise"/>
- <action name="Unshade"/>
- </finalactions>
</action>
</keybind>
</mousebind>
<mousebind button="A-Up" action="Click">
- <action name="GoToDesktop"><to>previous</to></action>
+ <action name="DesktopPrevious"/>
</mousebind>
<mousebind button="A-Down" action="Click">
- <action name="GoToDesktop"><to>next</to></action>
+ <action name="DesktopNext"/>
</mousebind>
<mousebind button="C-A-Up" action="Click">
- <action name="GoToDesktop"><to>previous</to></action>
+ <action name="DesktopPrevious"/>
</mousebind>
<mousebind button="C-A-Down" action="Click">
- <action name="GoToDesktop"><to>next</to></action>
+ <action name="DesktopNext"/>
</mousebind>
<mousebind button="A-S-Up" action="Click">
- <action name="SendToDesktop"><to>previous</to></action>
+ <action name="SendToDesktopPrevious"/>
</mousebind>
<mousebind button="A-S-Down" action="Click">
- <action name="SendToDesktop"><to>next</to></action>
+ <action name="SendToDesktopNext"/>
</mousebind>
</context>
<action name="Move"/>
</mousebind>
<mousebind button="Left" action="DoubleClick">
- <action name="ToggleMaximize"/>
+ <action name="ToggleMaximizeFull"/>
</mousebind>
<mousebind button="Middle" action="Press">
<action name="Raise"/>
</mousebind>
<mousebind button="Left" action="Drag">
- <action name="Resize"><edge>bottomleft</edge></action>
+ <action name="Resize"/>
</mousebind>
</context>
<action name="Raise"/>
</mousebind>
<mousebind button="Left" action="Drag">
- <action name="Resize"><edge>bottomright</edge></action>
+ <action name="Resize"/>
</mousebind>
</context>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Drag">
- <action name="Resize"><edge>topleft</edge></action>
+ <action name="Resize"/>
</mousebind>
</context>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Drag">
- <action name="Resize"><edge>topright</edge></action>
+ <action name="Resize"/>
</mousebind>
</context>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Click">
- <action name="ToggleMaximize"/>
+ <action name="ToggleMaximizeFull"/>
</mousebind>
<mousebind button="Middle" action="Click">
- <action name="ToggleMaximize"><direction>vertical</direction></action>
+ <action name="ToggleMaximizeVert"/>
</mousebind>
<mousebind button="Right" action="Click">
- <action name="ToggleMaximize"><direction>horizontal</direction></action>
+ <action name="ToggleMaximizeHorz"/>
</mousebind>
</context>
</context>
<context name="Desktop">
- <mousebind button="Up" action="Press">
- <action name="GoToDesktop"><to>previous</to></action>
+ <mousebind button="Up" action="Click">
+ <action name="DesktopPrevious"/>
</mousebind>
- <mousebind button="Down" action="Press">
- <action name="GoToDesktop"><to>next</to></action>
+ <mousebind button="Down" action="Click">
+ <action name="DesktopNext"/>
</mousebind>
- <mousebind button="A-Up" action="Press">
- <action name="GoToDesktop"><to>previous</to></action>
+ <mousebind button="A-Up" action="Click">
+ <action name="DesktopPrevious"/>
</mousebind>
- <mousebind button="A-Down" action="Press">
- <action name="GoToDesktop"><to>next</to></action>
+ <mousebind button="A-Down" action="Click">
+ <action name="DesktopNext"/>
</mousebind>
- <mousebind button="C-A-Up" action="Press">
- <action name="GoToDesktop"><to>previous</to></action>
+ <mousebind button="C-A-Up" action="Click">
+ <action name="DesktopPrevious"/>
</mousebind>
- <mousebind button="C-A-Down" action="Press">
- <action name="GoToDesktop"><to>next</to></action>
+ <mousebind button="C-A-Down" action="Click">
+ <action name="DesktopNext"/>
</mousebind>
<mousebind button="Left" action="Press">
</context>
<context name="MoveResize">
- <mousebind button="Up" action="Press">
- <action name="GoToDesktop"><to>previous</to></action>
+ <mousebind button="Up" action="Click">
+ <action name="DesktopPrevious"/>
</mousebind>
- <mousebind button="Down" action="Press">
- <action name="GoToDesktop"><to>next</to></action>
+ <mousebind button="Down" action="Click">
+ <action name="DesktopNext"/>
</mousebind>
- <mousebind button="A-Up" action="Press">
- <action name="GoToDesktop"><to>previous</to></action>
+ <mousebind button="A-Up" action="Click">
+ <action name="DesktopPrevious"/>
</mousebind>
- <mousebind button="A-Down" action="Press">
- <action name="GoToDesktop"><to>next</to></action>
+ <mousebind button="A-Down" action="Click">
+ <action name="DesktopNext"/>
</mousebind>
</context>
</mouse>
<!-- XML Schema for the Openbox window manager configuration file -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- targetNamespace="http://openbox.org/4.0/rc"
- xmlns:ob="http://openbox.org/4.0/rc"
+ targetNamespace="http://openbox.org/3.4/rc"
+ xmlns:ob="http://openbox.org/3.4/rc"
elementFormDefault="qualified">
<!--
root node
-->
<xsd:simpleType name="actionname">
<xsd:restriction base="xsd:string">
- <xsd:enumeration value="AddDesktop"/>
+ <xsd:enumeration value="Activate"/>
<xsd:enumeration value="BreakChroot"/>
<xsd:enumeration value="Close"/>
- <xsd:enumeration value="Debug"/>
- <xsd:enumeration value="Decorate"/>
- <xsd:enumeration value="DirectionalCycleWindows"/>
- <xsd:enumeration value="DirectionalTargetWindow"/>
+ <xsd:enumeration value="Desktop"/>
+ <xsd:enumeration value="DesktopDown"/>
+ <xsd:enumeration value="DesktopLast"/>
+ <xsd:enumeration value="DesktopLeft"/>
+ <xsd:enumeration value="DesktopNext"/>
+ <xsd:enumeration value="DesktopPrevious"/>
+ <xsd:enumeration value="DesktopRight"/>
+ <xsd:enumeration value="DesktopUp"/>
+ <xsd:enumeration value="DirectionalFocusEast"/>
+ <xsd:enumeration value="DirectionalFocusNorth"/>
+ <xsd:enumeration value="DirectionalFocusNortheast"/>
+ <xsd:enumeration value="DirectionalFocusNorthwest"/>
+ <xsd:enumeration value="DirectionalFocusSouth"/>
+ <xsd:enumeration value="DirectionalFocusSoutheast"/>
+ <xsd:enumeration value="DirectionalFocusSouthwest"/>
+ <xsd:enumeration value="DirectionalFocusWest"/>
<xsd:enumeration value="Execute"/>
<xsd:enumeration value="Exit"/>
<xsd:enumeration value="Focus"/>
<xsd:enumeration value="FocusToBottom"/>
- <xsd:enumeration value="GoToDesktop"/>
- <xsd:enumeration value="GrowToEdge"/>
+ <xsd:enumeration value="GrowToEdgeEast"/>
+ <xsd:enumeration value="GrowToEdgeNorth"/>
+ <xsd:enumeration value="GrowToEdgeSouth"/>
+ <xsd:enumeration value="GrowToEdgeWest"/>
<xsd:enumeration value="Iconify"/>
- <xsd:enumeration value="If"/>
<xsd:enumeration value="Kill"/>
<xsd:enumeration value="Lower"/>
- <xsd:enumeration value="Maximize"/>
+ <xsd:enumeration value="MaximizeFull"/>
+ <xsd:enumeration value="MaximizeHorz"/>
+ <xsd:enumeration value="MaximizeVert"/>
<xsd:enumeration value="Move"/>
<xsd:enumeration value="MoveRelative"/>
- <xsd:enumeration value="MoveResizeTo"/>
- <xsd:enumeration value="MoveToEdge"/>
+ <xsd:enumeration value="MoveRelativeHorz"/>
+ <xsd:enumeration value="MoveRelativeVert"/>
+ <xsd:enumeration value="MoveToCenter"/>
+ <xsd:enumeration value="MoveFromEdgeEast"/>
+ <xsd:enumeration value="MoveFromEdgeNorth"/>
+ <xsd:enumeration value="MoveFromEdgeSouth"/>
+ <xsd:enumeration value="MoveFromEdgeWest"/>
+ <xsd:enumeration value="MoveToEdgeEast"/>
+ <xsd:enumeration value="MoveToEdgeNorth"/>
+ <xsd:enumeration value="MoveToEdgeSouth"/>
+ <xsd:enumeration value="MoveToEdgeWest"/>
<xsd:enumeration value="NextWindow"/>
<xsd:enumeration value="PreviousWindow"/>
<xsd:enumeration value="Raise"/>
<xsd:enumeration value="RaiseLower"/>
<xsd:enumeration value="Reconfigure"/>
- <xsd:enumeration value="RemoveDesktop"/>
<xsd:enumeration value="Resize"/>
<xsd:enumeration value="ResizeRelative"/>
+ <xsd:enumeration value="ResizeRelativeHorz"/>
+ <xsd:enumeration value="ResizeRelativeVert"/>
<xsd:enumeration value="Restart"/>
+ <xsd:enumeration value="SendToBottomLayer"/>
<xsd:enumeration value="SendToDesktop"/>
- <xsd:enumeration value="SendToLayer"/>
+ <xsd:enumeration value="SendToDesktopDown"/>
+ <xsd:enumeration value="SendToDesktopLeft"/>
+ <xsd:enumeration value="SendToDesktopNext"/>
+ <xsd:enumeration value="SendToDesktopPrevious"/>
+ <xsd:enumeration value="SendToDesktopRight"/>
+ <xsd:enumeration value="SendToDesktopUp"/>
+ <xsd:enumeration value="SendToNormalLayer"/>
+ <xsd:enumeration value="SendToTopLayer"/>
<xsd:enumeration value="Shade"/>
+ <xsd:enumeration value="ShadeLower"/>
+ <xsd:enumeration value="ShowDesktop"/>
<xsd:enumeration value="ShowMenu"/>
<xsd:enumeration value="ToggleAlwaysOnBottom"/>
<xsd:enumeration value="ToggleAlwaysOnTop"/>
<xsd:enumeration value="ToggleDecorations"/>
<xsd:enumeration value="ToggleDockAutoHide"/>
<xsd:enumeration value="ToggleFullscreen"/>
- <xsd:enumeration value="ToggleMaximize"/>
+ <xsd:enumeration value="ToggleMaximizeFull"/>
+ <xsd:enumeration value="ToggleMaximizeHorz"/>
+ <xsd:enumeration value="ToggleMaximizeVert"/>
<xsd:enumeration value="ToggleOmnipresent"/>
<xsd:enumeration value="ToggleShade"/>
<xsd:enumeration value="ToggleShowDesktop"/>
- <xsd:enumeration value="Undecorate"/>
<xsd:enumeration value="Unfocus"/>
- <xsd:enumeration value="Unmaximize"/>
+ <xsd:enumeration value="UnmaximizeFull"/>
+ <xsd:enumeration value="UnmaximizeHorz"/>
+ <xsd:enumeration value="UnmaximizeVert"/>
<xsd:enumeration value="Unshade"/>
+ <xsd:enumeration value="UnshadeRaise"/>
+ <xsd:enumeration value="UnShowDesktop"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="clienttype">
<xsd:enumeration value="Left"/>
<xsd:enumeration value="Right"/>
<xsd:enumeration value="Bottom"/>
+ <xsd:enumeration value="Handle"/>
<xsd:enumeration value="Maximize"/>
<xsd:enumeration value="AllDesktops"/>
<xsd:enumeration value="Shade"/>
void actions_set_need_pointer_replay_before_move(gboolean replay);
/*! Returns if a ReplayPointer is still needed. If it was called while running
actions then this will be false */
-gboolean actions_get_need_pointer_replay_before_move();
+gboolean actions_get_need_pointer_replay_before_move(void);
/*! Pass in a GSList of ObActionsAct's to be run. */
void actions_run_acts(GSList *acts,
ObFrameContext con,
struct _ObClient *client);
-gboolean actions_interactive_act_running();
-void actions_interactive_cancel_act();
+gboolean actions_interactive_act_running(void);
+void actions_interactive_cancel_act(void);
gboolean actions_interactive_input_event(XEvent *e);
static gpointer setup_add_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node);
static gpointer setup_remove_func(ObParseInst *i,
xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_addcurrent_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_addlast_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_removecurrent_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_removelast_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
static void free_func(gpointer options);
static gboolean run_func(ObActionsData *data, gpointer options);
free_func,
run_func,
NULL, NULL);
+ actions_register("AddDesktopLast",
+ setup_addlast_func,
+ free_func,
+ run_func,
+ NULL, NULL);
+ actions_register("RemoveDesktopLast",
+ setup_removelast_func,
+ free_func,
+ run_func,
+ NULL, NULL);
+ actions_register("AddDesktopCurrent",
+ setup_addcurrent_func,
+ free_func,
+ run_func,
+ NULL, NULL);
+ actions_register("RemoveDesktopCurrent",
+ setup_removecurrent_func,
+ free_func,
+ run_func,
+ NULL, NULL);
}
static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
return o;
}
+static gpointer setup_addcurrent_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_add_func(i, doc, node);
+ o->current = TRUE;
+ return o;
+}
+
+static gpointer setup_addlast_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_add_func(i, doc, node);
+ o->current = FALSE;
+ return o;
+}
+
+static gpointer setup_removecurrent_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_remove_func(i, doc, node);
+ o->current = TRUE;
+ return o;
+}
+
+static gpointer setup_removelast_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_remove_func(i, doc, node);
+ o->current = FALSE;
+ return o;
+}
+
static void free_func(gpointer options)
{
Options *o = options;
action_layer_startup();
action_movetoedge_startup();
action_growtoedge_startup();
- action_if_startup();
action_focustobottom_startup();
+ action_shadelowerraise_startup();
}
#ifndef __actions_all_h
#define __actions_all_h
-void action_all_startup();
+void action_all_startup(void);
-void action_execute_startup();
-void action_debug_startup();
-void action_showmenu_startup();
-void action_showdesktop_startup();
-void action_reconfigure_startup();
-void action_exit_startup();
-void action_restart_startup();
-void action_session_startup();
-void action_cyclewindows_startup();
-void action_breakchroot_startup();
-void action_close_startup();
-void action_move_startup();
-void action_focus_startup();
-void action_raise_startup();
-void action_lower_startup();
-void action_raiselower_startup();
-void action_unfocus_startup();
-void action_iconify_startup();
-void action_fullscreen_startup();
-void action_maximize_startup();
-void action_moveresizeto_startup();
-void action_moverelative_startup();
-void action_shade_startup();
-void action_kill_startup();
-void action_omnipresent_startup();
-void action_directionalwindows_startup();
-void action_resize_startup();
-void action_decorations_startup();
-void action_desktop_startup();
-void action_resizerelative_startup();
-void action_addremovedesktop_startup();
-void action_dockautohide_startup();
-void action_layer_startup();
-void action_movetoedge_startup();
-void action_growtoedge_startup();
-void action_if_startup();
-void action_focustobottom_startup();
+void action_execute_startup(void);
+void action_debug_startup(void);
+void action_showmenu_startup(void);
+void action_showdesktop_startup(void);
+void action_reconfigure_startup(void);
+void action_exit_startup(void);
+void action_restart_startup(void);
+void action_session_startup(void);
+void action_cyclewindows_startup(void);
+void action_breakchroot_startup(void);
+void action_close_startup(void);
+void action_move_startup(void);
+void action_focus_startup(void);
+void action_raise_startup(void);
+void action_lower_startup(void);
+void action_raiselower_startup(void);
+void action_unfocus_startup(void);
+void action_iconify_startup(void);
+void action_fullscreen_startup(void);
+void action_maximize_startup(void);
+void action_moveresizeto_startup(void);
+void action_moverelative_startup(void);
+void action_shade_startup(void);
+void action_kill_startup(void);
+void action_omnipresent_startup(void);
+void action_directionalwindows_startup(void);
+void action_resize_startup(void);
+void action_decorations_startup(void);
+void action_desktop_startup(void);
+void action_resizerelative_startup(void);
+void action_addremovedesktop_startup(void);
+void action_dockautohide_startup(void);
+void action_layer_startup(void);
+void action_movetoedge_startup(void);
+void action_growtoedge_startup(void);
+void action_focustobottom_startup(void);
+void action_shadelowerraise_startup(void);
#endif
#include "openbox/event.h"
#include "openbox/focus_cycle.h"
#include "openbox/openbox.h"
+#include "openbox/client.h"
#include "gettext.h"
typedef struct {
gboolean follow;
} Options;
-static gpointer setup_go_func(ObParseInst *i, xmlDocPtr doc,
- xmlNodePtr node);
-static gpointer setup_send_func(ObParseInst *i, xmlDocPtr doc,
- xmlNodePtr node);
+static gpointer setup_go_last_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_send_last_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_go_abs_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_send_abs_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_go_next_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_send_next_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_go_prev_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_send_prev_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_go_left_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_send_left_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_go_right_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_send_right_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_go_up_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_send_up_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_go_down_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_send_down_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
static gboolean run_func(ObActionsData *data, gpointer options);
void action_desktop_startup(void)
{
- actions_register("GoToDesktop", setup_go_func, g_free, run_func,
- NULL, NULL);
- actions_register("SendToDesktop", setup_send_func, g_free, run_func,
- NULL, NULL);
+ actions_register("DesktopLast", setup_go_last_func, g_free,
+ run_func, NULL, NULL);
+ actions_register("SendToDesktopLast", setup_send_last_func, g_free,
+ run_func, NULL, NULL);
+ actions_register("Desktop", setup_go_abs_func, g_free,
+ run_func, NULL, NULL);
+ actions_register("SendToDesktop", setup_send_abs_func, g_free,
+ run_func, NULL, NULL);
+ actions_register("DesktopNext", setup_go_next_func, g_free,
+ run_func, NULL, NULL);
+ actions_register("SendToDesktopNext", setup_send_next_func, g_free,
+ run_func, NULL, NULL);
+ actions_register("DesktopPrevious", setup_go_prev_func, g_free,
+ run_func, NULL, NULL);
+ actions_register("SendToDesktopPrevious", setup_send_prev_func, g_free,
+ run_func, NULL, NULL);
+ actions_register("DesktopLeft", setup_go_left_func, g_free,
+ run_func, NULL, NULL);
+ actions_register("SendToDesktopLeft", setup_send_left_func, g_free,
+ run_func, NULL, NULL);
+ actions_register("DesktopRight", setup_go_right_func, g_free,
+ run_func, NULL, NULL);
+ actions_register("SendToDesktopRight", setup_send_right_func, g_free,
+ run_func, NULL, NULL);
+ actions_register("DesktopUp", setup_go_up_func, g_free,
+ run_func, NULL, NULL);
+ actions_register("SendToDesktopUp", setup_send_up_func, g_free,
+ run_func, NULL, NULL);
+ actions_register("DesktopDown", setup_go_down_func, g_free,
+ run_func, NULL, NULL);
+ actions_register("SendToDesktopDown", setup_send_down_func, g_free,
+ run_func, NULL, NULL);
}
-static gpointer setup_go_func(ObParseInst *i, xmlDocPtr doc,
- xmlNodePtr node)
+static gpointer setup_follow(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
{
xmlNodePtr n;
- Options *o;
+ Options *o = g_new0(Options, 1);
+ o->send = TRUE;
+ o->follow = TRUE;
+ if ((n = parse_find_node("follow", node)))
+ o->follow = parse_bool(doc, n);
+ return o;
+}
- o = g_new0(Options, 1);
- /* don't go anywhere if theres no options given */
+static gpointer setup_go_last_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ Options *o = g_new0(Options, 1);
+ o->type = LAST;
+ return o;
+}
+
+static gpointer setup_send_last_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ Options *o = setup_follow(i, doc, node);
+ o->type = LAST;
+ return o;
+}
+
+static gpointer setup_go_abs_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ xmlNodePtr n;
+ Options *o = g_new0(Options, 1);
o->type = ABSOLUTE;
- o->abs.desktop = screen_desktop;
- /* wrap by default - it's handy! */
- o->rel.wrap = TRUE;
+ if ((n = parse_find_node("desktop", node)))
+ o->abs.desktop = parse_int(doc, n) - 1;
+ else
+ o->abs.desktop = screen_desktop;
+ return o;
+}
- if ((n = parse_find_node("to", node))) {
- gchar *s = parse_string(doc, n);
- if (!g_ascii_strcasecmp(s, "last"))
- o->type = LAST;
- else if (!g_ascii_strcasecmp(s, "next")) {
- o->type = RELATIVE;
- o->rel.linear = TRUE;
- o->rel.dir = OB_DIRECTION_EAST;
- }
- else if (!g_ascii_strcasecmp(s, "previous")) {
- o->type = RELATIVE;
- o->rel.linear = TRUE;
- o->rel.dir = OB_DIRECTION_WEST;
- }
- else if (!g_ascii_strcasecmp(s, "north") ||
- !g_ascii_strcasecmp(s, "up")) {
- o->type = RELATIVE;
- o->rel.dir = OB_DIRECTION_NORTH;
- }
- else if (!g_ascii_strcasecmp(s, "south") ||
- !g_ascii_strcasecmp(s, "down")) {
- o->type = RELATIVE;
- o->rel.dir = OB_DIRECTION_SOUTH;
- }
- else if (!g_ascii_strcasecmp(s, "west") ||
- !g_ascii_strcasecmp(s, "left")) {
- o->type = RELATIVE;
- o->rel.dir = OB_DIRECTION_WEST;
- }
- else if (!g_ascii_strcasecmp(s, "east") ||
- !g_ascii_strcasecmp(s, "right")) {
- o->type = RELATIVE;
- o->rel.dir = OB_DIRECTION_EAST;
- }
- else {
- o->type = ABSOLUTE;
- o->abs.desktop = atoi(s) - 1;
- }
- g_free(s);
- }
+static gpointer setup_send_abs_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ xmlNodePtr n;
+ Options *o = setup_follow(i, doc, node);
+ o->type = ABSOLUTE;
+ if ((n = parse_find_node("desktop", node)))
+ o->abs.desktop = parse_int(doc, n) - 1;
+ else
+ o->abs.desktop = screen_desktop;
+ return o;
+}
+
+static void setup_rel(Options *o, ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node, gboolean lin, ObDirection dir)
+{
+ xmlNodePtr n;
+
+ o->type = RELATIVE;
+ o->rel.linear = lin;
+ o->rel.dir = dir;
+ o->rel.wrap = TRUE;
if ((n = parse_find_node("wrap", node)))
o->rel.wrap = parse_bool(doc, n);
+}
+static gpointer setup_go_next_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ Options *o = g_new0(Options, 1);
+ setup_rel(o, i, doc, node, TRUE, OB_DIRECTION_EAST);
return o;
}
-static gpointer setup_send_func(ObParseInst *i, xmlDocPtr doc,
- xmlNodePtr node)
+static gpointer setup_send_next_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
{
- xmlNodePtr n;
- Options *o;
+ Options *o = setup_follow(i, doc, node);
+ setup_rel(o, i, doc, node, TRUE, OB_DIRECTION_EAST);
+ return o;
+}
- o = setup_go_func(i, doc, node);
- o->send = TRUE;
- o->follow = TRUE;
+static gpointer setup_go_prev_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ Options *o = g_new0(Options, 1);
+ setup_rel(o, i, doc, node, TRUE, OB_DIRECTION_WEST);
+ return o;
+}
- if ((n = parse_find_node("follow", node)))
- o->follow = parse_bool(doc, n);
+static gpointer setup_send_prev_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ Options *o = setup_follow(i, doc, node);
+ setup_rel(o, i, doc, node, TRUE, OB_DIRECTION_WEST);
+ return o;
+}
+
+static gpointer setup_go_left_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ Options *o = g_new0(Options, 1);
+ setup_rel(o, i, doc, node, FALSE, OB_DIRECTION_WEST);
+ return o;
+}
+
+static gpointer setup_send_left_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ Options *o = setup_follow(i, doc, node);
+ setup_rel(o, i, doc, node, FALSE, OB_DIRECTION_WEST);
+ return o;
+}
+
+static gpointer setup_go_right_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ Options *o = g_new0(Options, 1);
+ setup_rel(o, i, doc, node, FALSE, OB_DIRECTION_EAST);
+ return o;
+}
+
+static gpointer setup_send_right_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ Options *o = setup_follow(i, doc, node);
+ setup_rel(o, i, doc, node, FALSE, OB_DIRECTION_EAST);
+ return o;
+}
+
+static gpointer setup_go_up_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ Options *o = g_new0(Options, 1);
+ setup_rel(o, i, doc, node, FALSE, OB_DIRECTION_NORTH);
+ return o;
+}
+
+static gpointer setup_send_up_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ Options *o = setup_follow(i, doc, node);
+ setup_rel(o, i, doc, node, FALSE, OB_DIRECTION_NORTH);
+ return o;
+}
+static gpointer setup_go_down_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ Options *o = g_new0(Options, 1);
+ setup_rel(o, i, doc, node, FALSE, OB_DIRECTION_SOUTH);
+ return o;
+}
+
+static gpointer setup_send_down_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ Options *o = setup_follow(i, doc, node);
+ setup_rel(o, i, doc, node, FALSE, OB_DIRECTION_SOUTH);
return o;
}
#include "openbox/window.h"
#include "openbox/focus_cycle.h"
#include "openbox/openbox.h"
+#include "openbox/client.h"
#include "openbox/misc.h"
#include "gettext.h"
static gboolean cycling = FALSE;
static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node);
-static gpointer setup_cycle_func(ObParseInst *i, xmlDocPtr doc,
- xmlNodePtr node);
-static gpointer setup_target_func(ObParseInst *i, xmlDocPtr doc,
- xmlNodePtr node);
+static gpointer setup_north_cycle_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_south_cycle_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_east_cycle_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_west_cycle_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_northwest_cycle_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_northeast_cycle_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_southwest_cycle_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_southeast_cycle_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_north_target_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_south_target_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_east_target_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_west_target_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_northwest_target_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_northeast_target_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_southwest_target_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_southeast_target_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
static void free_func(gpointer options);
static gboolean run_func(ObActionsData *data, gpointer options);
static gboolean i_input_func(guint initial_state,
void action_directionalwindows_startup(void)
{
- actions_register("DirectionalCycleWindows", setup_cycle_func, free_func,
- run_func, i_input_func, i_cancel_func);
- actions_register("DirectionalTargetWindow", setup_target_func, free_func,
- run_func, NULL, NULL);
+ actions_register("DirectionalFocusNorth", setup_north_cycle_func,
+ free_func, run_func, i_input_func, i_cancel_func);
+ actions_register("DirectionalFocusSouth", setup_south_cycle_func,
+ free_func, run_func, i_input_func, i_cancel_func);
+ actions_register("DirectionalFocusWest", setup_west_cycle_func,
+ free_func, run_func, i_input_func, i_cancel_func);
+ actions_register("DirectionalFocusEast", setup_east_cycle_func,
+ free_func, run_func, i_input_func, i_cancel_func);
+ actions_register("DirectionalFocusNorthWest", setup_northwest_cycle_func,
+ free_func, run_func, i_input_func, i_cancel_func);
+ actions_register("DirectionalFocusNorthEast", setup_northeast_cycle_func,
+ free_func, run_func, i_input_func, i_cancel_func);
+ actions_register("DirectionalFocusSouthWest", setup_southwest_cycle_func,
+ free_func, run_func, i_input_func, i_cancel_func);
+ actions_register("DirectionalFocusSouthEast", setup_southeast_cycle_func,
+ free_func, run_func, i_input_func, i_cancel_func);
+ actions_register("DirectionalTargetNorth", setup_north_target_func,
+ free_func, run_func, i_input_func, i_cancel_func);
+ actions_register("DirectionalTargetSouth", setup_south_target_func,
+ free_func, run_func, i_input_func, i_cancel_func);
+ actions_register("DirectionalTargetWest", setup_west_target_func,
+ free_func, run_func, i_input_func, i_cancel_func);
+ actions_register("DirectionalTargetEast", setup_east_target_func,
+ free_func, run_func, i_input_func, i_cancel_func);
+ actions_register("DirectionalTargetNorthWest", setup_northwest_target_func,
+ free_func, run_func, i_input_func, i_cancel_func);
+ actions_register("DirectionalTargetNorthEast", setup_northeast_target_func,
+ free_func, run_func, i_input_func, i_cancel_func);
+ actions_register("DirectionalTargetSouthWest", setup_southwest_target_func,
+ free_func, run_func, i_input_func, i_cancel_func);
+ actions_register("DirectionalTargetSouthEast", setup_southeast_target_func,
+ free_func, run_func, i_input_func, i_cancel_func);
}
static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
o->dock_windows = parse_bool(doc, n);
if ((n = parse_find_node("desktop", node)))
o->desktop_windows = parse_bool(doc, n);
- if ((n = parse_find_node("direction", node))) {
- gchar *s = parse_string(doc, n);
- if (!g_ascii_strcasecmp(s, "north") ||
- !g_ascii_strcasecmp(s, "up"))
- o->direction = OB_DIRECTION_NORTH;
- else if (!g_ascii_strcasecmp(s, "northwest"))
- o->direction = OB_DIRECTION_NORTHWEST;
- else if (!g_ascii_strcasecmp(s, "northeast"))
- o->direction = OB_DIRECTION_NORTHEAST;
- else if (!g_ascii_strcasecmp(s, "west") ||
- !g_ascii_strcasecmp(s, "left"))
- o->direction = OB_DIRECTION_WEST;
- else if (!g_ascii_strcasecmp(s, "east") ||
- !g_ascii_strcasecmp(s, "right"))
- o->direction = OB_DIRECTION_EAST;
- else if (!g_ascii_strcasecmp(s, "south") ||
- !g_ascii_strcasecmp(s, "down"))
- o->direction = OB_DIRECTION_SOUTH;
- else if (!g_ascii_strcasecmp(s, "southwest"))
- o->direction = OB_DIRECTION_SOUTHWEST;
- else if (!g_ascii_strcasecmp(s, "southeast"))
- o->direction = OB_DIRECTION_SOUTHEAST;
- g_free(s);
- }
if ((n = parse_find_node("finalactions", node))) {
xmlNodePtr m;
return o;
}
-static gpointer setup_cycle_func(ObParseInst *i, xmlDocPtr doc,
- xmlNodePtr node)
+static gpointer setup_north_cycle_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_func(i, doc, node);
+ o->interactive = TRUE;
+ o->direction = OB_DIRECTION_NORTH;
+ return o;
+}
+
+static gpointer setup_south_cycle_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_func(i, doc, node);
+ o->interactive = TRUE;
+ o->direction = OB_DIRECTION_SOUTH;
+ return o;
+}
+
+static gpointer setup_east_cycle_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_func(i, doc, node);
+ o->interactive = TRUE;
+ o->direction = OB_DIRECTION_EAST;
+ return o;
+}
+
+static gpointer setup_west_cycle_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_func(i, doc, node);
+ o->interactive = TRUE;
+ o->direction = OB_DIRECTION_WEST;
+ return o;
+}
+
+static gpointer setup_northwest_cycle_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_func(i, doc, node);
+ o->interactive = TRUE;
+ o->direction = OB_DIRECTION_NORTHWEST;
+ return o;
+}
+
+static gpointer setup_northeast_cycle_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_func(i, doc, node);
+ o->interactive = TRUE;
+ o->direction = OB_DIRECTION_EAST;
+ return o;
+}
+
+static gpointer setup_southwest_cycle_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_func(i, doc, node);
+ o->interactive = TRUE;
+ o->direction = OB_DIRECTION_SOUTHWEST;
+ return o;
+}
+
+static gpointer setup_southeast_cycle_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
{
Options *o = setup_func(i, doc, node);
o->interactive = TRUE;
+ o->direction = OB_DIRECTION_SOUTHEAST;
+ return o;
+}
+
+static gpointer setup_north_target_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_func(i, doc, node);
+ o->interactive = FALSE;
+ o->direction = OB_DIRECTION_NORTH;
+ return o;
+}
+
+static gpointer setup_south_target_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_func(i, doc, node);
+ o->interactive = FALSE;
+ o->direction = OB_DIRECTION_SOUTH;
+ return o;
+}
+
+static gpointer setup_east_target_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_func(i, doc, node);
+ o->interactive = FALSE;
+ o->direction = OB_DIRECTION_EAST;
+ return o;
+}
+
+static gpointer setup_west_target_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_func(i, doc, node);
+ o->interactive = FALSE;
+ o->direction = OB_DIRECTION_WEST;
+ return o;
+}
+
+static gpointer setup_northwest_target_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_func(i, doc, node);
+ o->interactive = FALSE;
+ o->direction = OB_DIRECTION_NORTHWEST;
+ return o;
+}
+
+static gpointer setup_northeast_target_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_func(i, doc, node);
+ o->interactive = FALSE;
+ o->direction = OB_DIRECTION_NORTHEAST;
+ return o;
+}
+
+static gpointer setup_southwest_target_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_func(i, doc, node);
+ o->interactive = FALSE;
+ o->direction = OB_DIRECTION_SOUTHWEST;
return o;
}
-static gpointer setup_target_func(ObParseInst *i, xmlDocPtr doc,
- xmlNodePtr node)
+static gpointer setup_southeast_target_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
{
Options *o = setup_func(i, doc, node);
o->interactive = FALSE;
+ o->direction = OB_DIRECTION_SOUTHEAST;
return o;
}
typedef struct {
gboolean here;
+ gboolean activate;
} Options;
static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_activate_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
static void free_func(gpointer options);
static gboolean run_func(ObActionsData *data, gpointer options);
free_func,
run_func,
NULL, NULL);
+ actions_register("Activate",
+ setup_activate_func,
+ free_func,
+ run_func,
+ NULL, NULL);
}
static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
return o;
}
+static gpointer setup_activate_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = setup_func(i, doc, node);
+ o->activate = TRUE;
+ return o;
+}
+
static void free_func(gpointer options)
{
Options *o = options;
data->context != OB_FRAME_CONTEXT_FRAME))
{
actions_client_move(data, TRUE);
- client_activate(data->client, o->here, FALSE, FALSE, TRUE);
+ client_activate(data->client, o->here,
+ o->activate, o->activate, TRUE);
actions_client_move(data, FALSE);
}
} else if (data->context == OB_FRAME_CONTEXT_DESKTOP) {
ObDirection dir;
} Options;
-static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node);
-static void free_func(gpointer options);
+static gpointer setup_north_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_south_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_east_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_west_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
static gboolean run_func(ObActionsData *data, gpointer options);
void action_growtoedge_startup(void)
{
- actions_register("GrowToEdge",
- setup_func,
- free_func,
- run_func,
+ actions_register("GrowToEdgeNorth", setup_north_func, g_free, run_func,
+ NULL, NULL);
+ actions_register("GrowToEdgeSouth", setup_south_func, g_free, run_func,
+ NULL, NULL);
+ actions_register("GrowToEdgeEast", setup_east_func, g_free, run_func,
+ NULL, NULL);
+ actions_register("GrowToEdgeWest", setup_west_func, g_free, run_func,
NULL, NULL);
}
-static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
+static gpointer setup_north_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
{
- xmlNodePtr n;
- Options *o;
-
- o = g_new0(Options, 1);
+ Options *o = g_new0(Options, 1);
o->dir = OB_DIRECTION_NORTH;
+ return o;
+}
- if ((n = parse_find_node("direction", node))) {
- gchar *s = parse_string(doc, n);
- if (!g_ascii_strcasecmp(s, "north") ||
- !g_ascii_strcasecmp(s, "up"))
- o->dir = OB_DIRECTION_NORTH;
- else if (!g_ascii_strcasecmp(s, "south") ||
- !g_ascii_strcasecmp(s, "down"))
- o->dir = OB_DIRECTION_SOUTH;
- else if (!g_ascii_strcasecmp(s, "west") ||
- !g_ascii_strcasecmp(s, "left"))
- o->dir = OB_DIRECTION_WEST;
- else if (!g_ascii_strcasecmp(s, "east") ||
- !g_ascii_strcasecmp(s, "right"))
- o->dir = OB_DIRECTION_EAST;
- g_free(s);
- }
-
+static gpointer setup_south_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = g_new0(Options, 1);
+ o->dir = OB_DIRECTION_SOUTH;
return o;
}
-static void free_func(gpointer options)
+static gpointer setup_east_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
{
- Options *o = options;
+ Options *o = g_new0(Options, 1);
+ o->dir = OB_DIRECTION_EAST;
+ return o;
+}
- g_free(o);
+static gpointer setup_west_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = g_new0(Options, 1);
+ o->dir = OB_DIRECTION_WEST;
+ return o;
}
static gboolean do_grow(ObActionsData *data, gint x, gint y, gint w, gint h)
+++ /dev/null
-#include "openbox/actions.h"
-#include "openbox/misc.h"
-#include "openbox/client.h"
-#include "openbox/frame.h"
-#include "openbox/screen.h"
-#include "openbox/focus.h"
-#include <glib.h>
-
-typedef struct {
- gboolean shaded_on;
- gboolean shaded_off;
- gboolean maxvert_on;
- gboolean maxvert_off;
- gboolean maxhorz_on;
- gboolean maxhorz_off;
- gboolean maxfull_on;
- gboolean maxfull_off;
- gboolean iconic_on;
- gboolean iconic_off;
- gboolean focused;
- gboolean unfocused;
- GSList *thenacts;
- GSList *elseacts;
-} Options;
-
-static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node);
-static void free_func(gpointer options);
-static gboolean run_func(ObActionsData *data, gpointer options);
-
-void action_if_startup(void)
-{
- actions_register("If",
- setup_func,
- free_func,
- run_func,
- NULL, NULL);
-}
-
-static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
-{
- xmlNodePtr n;
- Options *o;
-
- o = g_new0(Options, 1);
-
- if ((n = parse_find_node("shaded", node))) {
- if (parse_bool(doc, n))
- o->shaded_on = TRUE;
- else
- o->shaded_off = TRUE;
- }
- if ((n = parse_find_node("maximized", node))) {
- if (parse_bool(doc, n))
- o->maxfull_on = TRUE;
- else
- o->maxfull_off = TRUE;
- }
- if ((n = parse_find_node("maximizedhorizontal", node))) {
- if (parse_bool(doc, n))
- o->maxhorz_on = TRUE;
- else
- o->maxhorz_off = TRUE;
- }
- if ((n = parse_find_node("maximizedvertical", node))) {
- if (parse_bool(doc, n))
- o->maxvert_on = TRUE;
- else
- o->maxvert_off = TRUE;
- }
- if ((n = parse_find_node("iconified", node))) {
- if (parse_bool(doc, n))
- o->iconic_on = TRUE;
- else
- o->iconic_off = TRUE;
- }
- if ((n = parse_find_node("focused", node))) {
- if (parse_bool(doc, n))
- o->focused = TRUE;
- else
- o->unfocused = TRUE;
- }
-
- if ((n = parse_find_node("then", node))) {
- xmlNodePtr m;
-
- m = parse_find_node("action", n->xmlChildrenNode);
- while (m) {
- ObActionsAct *action = actions_parse(i, doc, m);
- if (action) o->thenacts = g_slist_append(o->thenacts, action);
- m = parse_find_node("action", m->next);
- }
- }
- if ((n = parse_find_node("else", node))) {
- xmlNodePtr m;
-
- m = parse_find_node("action", n->xmlChildrenNode);
- while (m) {
- ObActionsAct *action = actions_parse(i, doc, m);
- if (action) o->elseacts = g_slist_append(o->elseacts, action);
- m = parse_find_node("action", m->next);
- }
- }
-
- return o;
-}
-
-static void free_func(gpointer options)
-{
- Options *o = options;
-
- g_free(o);
-}
-
-/* Always return FALSE because its not interactive */
-static gboolean run_func(ObActionsData *data, gpointer options)
-{
- Options *o = options;
- GSList *acts;
- ObClient *c = data->client;
-
- if ((!o->shaded_on || (c && c->shaded)) &&
- (!o->shaded_off || (c && !c->shaded)) &&
- (!o->iconic_on || (c && c->iconic)) &&
- (!o->iconic_off || (c && !c->iconic)) &&
- (!o->maxhorz_on || (c && c->max_horz)) &&
- (!o->maxhorz_off || (c && !c->max_horz)) &&
- (!o->maxvert_on || (c && c->max_vert)) &&
- (!o->maxvert_off || (c && !c->max_vert)) &&
- (!o->maxfull_on || (c && c->max_vert && c->max_horz)) &&
- (!o->maxfull_off || (c && !(c->max_vert && c->max_horz))) &&
- (!o->focused || (c && (c == focus_client))) &&
- (!o->unfocused || (c && !(c == focus_client))))
- {
- acts = o->thenacts;
- }
- else
- acts = o->elseacts;
-
- actions_run_acts(acts, data->uact, data->state,
- data->x, data->y, data->button,
- data->context, data->client);
-
- return FALSE;
-}
static gpointer setup_func_top(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node);
static gpointer setup_func_bottom(ObParseInst *i, xmlDocPtr doc,
xmlNodePtr node);
-static gpointer setup_func_send(ObParseInst *i, xmlDocPtr doc,
- xmlNodePtr node);
+static gpointer setup_sendtop_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_sendbottom_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_sendnormal_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
static gboolean run_func(ObActionsData *data, gpointer options);
void action_layer_startup(void)
run_func, NULL, NULL);
actions_register("ToggleAlwaysOnBottom", setup_func_bottom, g_free,
run_func, NULL, NULL);
- actions_register("SendToLayer", setup_func_send, g_free,
+ actions_register("SendToTopLayer", setup_sendtop_func, g_free,
+ run_func, NULL, NULL);
+ actions_register("SendToBottomLayer", setup_sendbottom_func, g_free,
+ run_func, NULL, NULL);
+ actions_register("SendToNormalLayer", setup_sendnormal_func, g_free,
run_func, NULL, NULL);
}
return o;
}
-static gpointer setup_func_send(ObParseInst *i, xmlDocPtr doc,
- xmlNodePtr node)
+static gpointer setup_sendtop_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
{
- xmlNodePtr n;
- Options *o;
-
- o = g_new0(Options, 1);
+ Options *o = g_new0(Options, 1);
+ o->layer = 1;
+ o->toggle = FALSE;
+ return o;
+}
- if ((n = parse_find_node("layer", node))) {
- gchar *s = parse_string(doc, n);
- if (!g_ascii_strcasecmp(s, "above") ||
- !g_ascii_strcasecmp(s, "top"))
- o->layer = 1;
- else if (!g_ascii_strcasecmp(s, "below") ||
- !g_ascii_strcasecmp(s, "bottom"))
- o->layer = -1;
- else if (!g_ascii_strcasecmp(s, "normal") ||
- !g_ascii_strcasecmp(s, "middle"))
- o->layer = 0;
- g_free(s);
- }
+static gpointer setup_sendbottom_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = g_new0(Options, 1);
+ o->layer = -1;
+ o->toggle = FALSE;
+ return o;
+}
+static gpointer setup_sendnormal_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = g_new0(Options, 1);
+ o->layer = 0;
+ o->toggle = FALSE;
return o;
}
MaxDirection dir;
} Options;
-static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_both_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_horz_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_vert_func(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node);
static gboolean run_func_on(ObActionsData *data, gpointer options);
static gboolean run_func_off(ObActionsData *data, gpointer options);
static gboolean run_func_toggle(ObActionsData *data, gpointer options);
void action_maximize_startup(void)
{
- actions_register("Maximize", setup_func, g_free, run_func_on,
- NULL, NULL);
- actions_register("Unmaximize", setup_func, g_free, run_func_off,
- NULL, NULL);
- actions_register("ToggleMaximize", setup_func, g_free, run_func_toggle,
- NULL, NULL);
+ actions_register("MaximizeFull", setup_both_func, g_free,
+ run_func_on, NULL, NULL);
+ actions_register("UnmaximizeFull", setup_both_func, g_free,
+ run_func_off, NULL, NULL);
+ actions_register("ToggleMaximizeFull", setup_both_func, g_free,
+ run_func_toggle, NULL, NULL);
+ actions_register("MaximizeHorz", setup_horz_func, g_free,
+ run_func_on, NULL, NULL);
+ actions_register("UnmaximizeHorz", setup_horz_func, g_free,
+ run_func_off, NULL, NULL);
+ actions_register("ToggleMaximizeHorz", setup_horz_func, g_free,
+ run_func_toggle, NULL, NULL);
+ actions_register("MaximizeVert", setup_vert_func, g_free,
+ run_func_on, NULL, NULL);
+ actions_register("UnmaximizeVert", setup_vert_func, g_free,
+ run_func_off, NULL, NULL);
+ actions_register("ToggleMaximizeVert", setup_vert_func, g_free,
+ run_func_toggle, NULL, NULL);
}
-static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
+static gpointer setup_both_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
{
- xmlNodePtr n;
- Options *o;
-
- o = g_new0(Options, 1);
+ Options *o = g_new0(Options, 1);
o->dir = BOTH;
+ return o;
+}
- if ((n = parse_find_node("direction", node))) {
- gchar *s = parse_string(doc, n);
- if (!g_ascii_strcasecmp(s, "vertical") ||
- !g_ascii_strcasecmp(s, "vert"))
- o->dir = VERT;
- else if (!g_ascii_strcasecmp(s, "horizontal") ||
- !g_ascii_strcasecmp(s, "horz"))
- o->dir = HORZ;
- g_free(s);
- }
+static gpointer setup_horz_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = g_new0(Options, 1);
+ o->dir = HORZ;
+ return o;
+}
+static gpointer setup_vert_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
+{
+ Options *o = g_new0(Options, 1);
+ o->dir = VERT;
return o;
}
} Options;
static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node);
+static gpointer setup_center_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
static void free_func(gpointer options);
static gboolean run_func(ObActionsData *data, gpointer options);
free_func,
run_func,
NULL, NULL);
+ actions_register("MoveToCenter",
+ setup_center_func,
+ free_func,
+ run_func,
+ NULL, NULL);
}
static void parse_coord(xmlDocPtr doc, xmlNodePtr n, gint *pos,
return o;
}
+static gpointer setup_center_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ Options *o;
+
+ o = g_new0(Options, 1);
+ o->x = G_MININT;
+ o->y = G_MININT;
+ o->w = G_MININT;
+ o->h = G_MININT;
+ o->monitor = -1;
+ o->xcenter = TRUE;
+ o->ycenter = TRUE;
+ return o;
+}
+
static void free_func(gpointer options)
{
Options *o = options;
ObDirection dir;
} Options;
-static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node);
-static void free_func(gpointer options);
+static gpointer setup_north_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_south_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_east_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
+static gpointer setup_west_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node);
static gboolean run_func(ObActionsData *data, gpointer options);
void action_movetoedge_startup(void)
{
- actions_register("MoveToEdge",
- setup_func,
- free_func,
- run_func,
+ actions_register("MoveToEdgeNorth", setup_north_func, g_free, run_func,
+ NULL, NULL);
+ actions_register("MoveToEdgeSouth", setup_south_func, g_free, run_func,
+ NULL, NULL);
+ actions_register("MoveToEdgeEast", setup_east_func, g_free, run_func,
+ NULL, NULL);
+ actions_register("MoveToEdgeWest", setup_west_func, g_free, run_func,
NULL, NULL);
}
-static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
+static gpointer setup_north_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
{
- xmlNodePtr n;
- Options *o;
-
- o = g_new0(Options, 1);
+ Options *o = g_new0(Options, 1);
o->dir = OB_DIRECTION_NORTH;
+ return o;
+}
- if ((n = parse_find_node("direction", node))) {
- gchar *s = parse_string(doc, n);
- if (!g_ascii_strcasecmp(s, "north") ||
- !g_ascii_strcasecmp(s, "up"))
- o->dir = OB_DIRECTION_NORTH;
- else if (!g_ascii_strcasecmp(s, "south") ||
- !g_ascii_strcasecmp(s, "down"))
- o->dir = OB_DIRECTION_SOUTH;
- else if (!g_ascii_strcasecmp(s, "west") ||
- !g_ascii_strcasecmp(s, "left"))
- o->dir = OB_DIRECTION_WEST;
- else if (!g_ascii_strcasecmp(s, "east") ||
- !g_ascii_strcasecmp(s, "right"))
- o->dir = OB_DIRECTION_EAST;
- g_free(s);
- }
-
+static gpointer setup_south_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ Options *o = g_new0(Options, 1);
+ o->dir = OB_DIRECTION_SOUTH;
return o;
}
-static void free_func(gpointer options)
+static gpointer setup_east_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
{
- Options *o = options;
+ Options *o = g_new0(Options, 1);
+ o->dir = OB_DIRECTION_EAST;
+ return o;
+}
- g_free(o);
+static gpointer setup_west_func(ObParseInst *i, xmlDocPtr doc,
+ xmlNodePtr node)
+{
+ Options *o = g_new0(Options, 1);
+ o->dir = OB_DIRECTION_WEST;
+ return o;
}
/* Always return FALSE because its not interactive */
--- /dev/null
+#include "openbox/actions.h"
+#include "openbox/client.h"
+
+static gboolean run_func_sl(ObActionsData *data, gpointer options);
+static gboolean run_func_ur(ObActionsData *data, gpointer options);
+
+void action_shadelowerraise_startup()
+{
+ actions_register("ShadeLower", NULL, NULL, run_func_sl, NULL, NULL);
+ actions_register("UnshadeRaise", NULL, NULL, run_func_ur, NULL, NULL);
+}
+
+/* Always return FALSE because its not interactive */
+static gboolean run_func_sl(ObActionsData *data, gpointer options)
+{
+ if (data->client) {
+ actions_client_move(data, TRUE);
+ if (data->client->shaded)
+ stacking_lower(CLIENT_AS_WINDOW(data->client));
+ else
+ client_shade(data->client, TRUE);
+ actions_client_move(data, FALSE);
+ }
+ return FALSE;
+}
+
+/* Always return FALSE because its not interactive */
+static gboolean run_func_ur(ObActionsData *data, gpointer options)
+{
+ if (data->client) {
+ actions_client_move(data, TRUE);
+ if (data->client->shaded)
+ client_shade(data->client, FALSE);
+ else
+ stacking_raise(CLIENT_AS_WINDOW(data->client));
+ actions_client_move(data, FALSE);
+ }
+ return FALSE;
+}
void client_remove_destroy_notify(ObClientCallback func);
/*! Manages all existing windows */
-void client_manage_all();
+void client_manage_all(void);
/*! Manages a given window
@param prompt This specifies an ObPrompt which is being managed. It is
possible to manage Openbox-owned windows through this.
*/
void client_manage(Window win, struct _ObPrompt *prompt);
/*! Unmanages all managed windows */
-void client_unmanage_all();
+void client_unmanage_all(void);
/*! Unmanages a given client */
void client_unmanage(ObClient *client);
void client_fake_unmanage(ObClient *self);
/*! Sets the client list on the root window from the client_list */
-void client_set_list();
+void client_set_list(void);
/*! Determines if the client should be shown or hidden currently.
@return TRUE if it should be visible; otherwise, FALSE.
guint client_monitor(ObClient *self);
-ObClient* client_under_pointer();
+ObClient* client_under_pointer(void);
gboolean client_has_group_siblings(ObClient *self);
#ifndef ob__client_menu_h
#define ob__client_menu_h
-void client_menu_startup();
+void client_menu_startup(void);
#endif
{ "Left", "AllDesktops", OB_MOUSE_ACTION_CLICK, "Raise" },
{ "Left", "Shade", OB_MOUSE_ACTION_CLICK, "Raise" },
{ "Left", "Close", OB_MOUSE_ACTION_CLICK, "Close" },
- { "Left", "Maximize", OB_MOUSE_ACTION_CLICK, "ToggleMaximize" },
+ { "Left", "Maximize", OB_MOUSE_ACTION_CLICK, "ToggleMaximizeFull" },
{ "Left", "Iconify", OB_MOUSE_ACTION_CLICK, "Iconify" },
{ "Left", "AllDesktops", OB_MOUSE_ACTION_CLICK, "ToggleOmnipresent" },
{ "Left", "Shade", OB_MOUSE_ACTION_CLICK, "ToggleShade" },
extern GSList *config_per_app_settings;
void config_startup(struct _ObParseInst *i);
-void config_shutdown();
+void config_shutdown(void);
/*! Create an ObAppSettings structure with the default values */
-ObAppSettings* config_create_app_settings();
+ObAppSettings* config_create_app_settings(void);
/*! Copies any settings in src to dest, if they are their default value in
src. */
void config_app_settings_copy_non_defaults(const ObAppSettings *src,
void dock_startup(gboolean reconfig);
void dock_shutdown(gboolean reconfig);
-void dock_configure();
+void dock_configure(void);
void dock_hide(gboolean hide);
void dock_add(Window win, XWMHints *wmhints);
-void dock_remove_all();
+void dock_remove_all(void);
void dock_remove(ObDockApp *app, gboolean reparent);
void dock_app_drag(ObDockApp *app, XMotionEvent *e);
/*! Make mouse focus not move at all from the stuff that happens between these
two function calls. */
-gulong event_start_ignore_all_enters();
+gulong event_start_ignore_all_enters(void);
void event_end_ignore_all_enters(gulong start);
/*! End *all* active and passive grabs on the keyboard
Actions should not rely on being able to move focus during an
interactive grab. */
-void event_cancel_all_key_grabs();
+void event_cancel_all_key_grabs(void);
/* Halts any focus delay in progress, use this when the user is selecting a
window for focus */
-void event_halt_focus_delay();
+void event_halt_focus_delay(void);
/*! Compare t1 and t2, taking into account wraparound. True if t1
comes at the same time or later than t2. */
gboolean event_time_after(Time t1, Time t2);
-Time event_get_server_time();
+Time event_get_server_time(void);
#endif
/*! Base for events for the Sync extension */
extern gint extensions_sync_event_basep;
-void extensions_query_all();
+void extensions_query_all(void);
void extensions_xinerama_screens(Rect **areas, guint *nxin);
void focus_set_client(struct _ObClient *client);
/*! Focus nothing, but let keyboard events be caught. */
-void focus_nothing();
+void focus_nothing(void);
/*! Call this when you need to focus something! */
struct _ObClient* focus_fallback(gboolean allow_refocus,
void focus_cycle_popup_show(struct _ObClient *c, gboolean iconic_windows,
gboolean all_desktops, gboolean dock_windows,
gboolean desktop_windows);
-void focus_cycle_popup_hide();
+void focus_cycle_popup_hide(void);
void focus_cycle_popup_single_show(struct _ObClient *c,
gboolean iconic_windows,
gboolean all_desktops,
gboolean dock_windows,
gboolean desktop_windows);
-void focus_cycle_popup_single_hide();
+void focus_cycle_popup_single_hide(void);
#endif
return OB_FRAME_CONTEXT_TOP;
else if (!g_ascii_strcasecmp("Bottom", name))
return OB_FRAME_CONTEXT_BOTTOM;
+ else if (!g_ascii_strcasecmp("Handle", name))
+ return OB_FRAME_CONTEXT_BOTTOM;
else if (!g_ascii_strcasecmp("Left", name))
return OB_FRAME_CONTEXT_LEFT;
else if (!g_ascii_strcasecmp("Right", name))
#define grab_pointer(o,c,u) grab_pointer_full(TRUE, (o), (c), (u))
#define ungrab_pointer() grab_pointer_full(FALSE, FALSE, FALSE, OB_CURSOR_NONE)
-gboolean grab_on_keyboard();
-gboolean grab_on_pointer();
+gboolean grab_on_keyboard(void);
+gboolean grab_on_pointer(void);
void grab_button_full(guint button, guint state, Window win, guint mask,
gint pointer_mode, ObCursor cursor);
void ungrab_all_keys(Window win);
void grab_key_passive_count(int change);
-void ungrab_passive_key();
+void ungrab_passive_key(void);
#endif
void keyboard_startup(gboolean reconfig);
void keyboard_shutdown(gboolean reconfig);
-void keyboard_rebind();
+void keyboard_rebind(void);
void keyboard_chroot(GList *keylist);
gboolean keyboard_bind(GList *keylist, struct _ObActionsAct *action);
-void keyboard_unbind_all();
+void keyboard_unbind_all(void);
void keyboard_event(struct _ObClient *client, const XEvent *e);
/*! @param break_chroots how many chroots to break. -1 means to break them ALL!
/*! Repopulate a pipe-menu by running its command */
void menu_pipe_execute(ObMenu *self);
/*! Clear a pipe-menu's entries */
-void menu_clear_pipe_caches();
+void menu_clear_pipe_caches(void);
void menu_show_all_shortcuts(ObMenu *self, gboolean show);
void menu_show(gchar *name, gint x, gint y, gboolean mouse,
struct _ObClient *client);
-gboolean menu_hide_delay_reached();
+gboolean menu_hide_delay_reached(void);
void menu_set_show_func(ObMenu *menu, ObMenuShowFunc func);
void menu_set_hide_func(ObMenu *menu, ObMenuHideFunc func);
gboolean menu_frame_show_submenu(ObMenuFrame *self, ObMenuFrame *parent,
ObMenuEntryFrame *parent_entry);
-void menu_frame_hide_all();
+void menu_frame_hide_all(void);
void menu_frame_hide_all_client(struct _ObClient *client);
void menu_frame_render(ObMenuFrame *self);
return TRUE;
}
-void mouse_replay_pointer()
+void mouse_replay_pointer(void)
{
if (replay_pointer_needed) {
/* replay the pointer event before any windows move */
gboolean mouse_bind(const gchar *buttonstr, const gchar *contextstr,
ObMouseAction mact, struct _ObActionsAct *action);
-void mouse_unbind_all();
+void mouse_unbind_all(void);
void mouse_event(struct _ObClient *client, XEvent *e);
/*! If a replay pointer is needed, then do it. Call this when windows are
going to be moving/appearing/disappearing, so that you know the mouse click
will go to the right window */
-void mouse_replay_pointer();
+void mouse_replay_pointer(void);
#endif
}
}
-static void print_version()
+static void print_version(void)
{
g_print("Openbox %s\n", PACKAGE_VERSION);
g_print(_("Copyright (c)"));
g_print("under certain conditions. See the file COPYING for details.\n\n");
}
-static void print_help()
+static void print_help(void)
{
g_print(_("Syntax: openbox [options]\n"));
g_print(_("\nOptions:\n"));
*argc -= num;
}
-static void parse_env()
+static void parse_env(void)
{
/* unset this so we don't pass it on unknowingly */
unsetenv("DESKTOP_STARTUP_ID");
ob_restart();
}
-void ob_restart()
+void ob_restart(void)
{
restart = TRUE;
ob_exit(0);
}
-void ob_reconfigure()
+void ob_reconfigure(void)
{
reconfigure = TRUE;
ob_exit(0);
ob_main_loop_exit(ob_main_loop);
}
-void ob_exit_replace()
+void ob_exit_replace(void)
{
exitcode = 0;
being_replaced = TRUE;
return keys[key];
}
-ObState ob_state()
+ObState ob_state(void)
{
return state;
}
extern gboolean ob_debug_xinerama;
/* The state of execution of the window manager */
-ObState ob_state();
+ObState ob_state(void);
void ob_set_state(ObState state);
void ob_restart_other(const gchar *path);
-void ob_restart();
+void ob_restart(void);
void ob_exit(gint code);
-void ob_exit_replace();
+void ob_exit_replace(void);
-void ob_reconfigure();
+void ob_reconfigure(void);
void ob_exit_with_error(const gchar *msg);
RrAppearance *unhilight;
};
-ObPopup *popup_new();
+ObPopup *popup_new(void);
void popup_free(ObPopup *self);
/*! Position the popup. The gravity rules are not the same X uses for windows,
RrAppearance *popup_icon_appearance(ObPopup *self);
-ObIconPopup *icon_popup_new();
+ObIconPopup *icon_popup_new(void);
void icon_popup_free(ObIconPopup *self);
#define icon_popup_show(s, t, i) icon_popup_delay_show((s),0,(t),(i))
#define icon_popup_set_text_align(p, j) popup_set_text_align((p)->popup,(j))
void icon_popup_icon_size_multiplier(ObIconPopup *self, guint wm, guint hm);
-ObPagerPopup *pager_popup_new();
+ObPagerPopup *pager_popup_new(void);
void pager_popup_free(ObPagerPopup *self);
#define pager_popup_show(s, t, d) pager_popup_delay_show((s),0,(t),(d))
} Atoms;
extern Atoms prop_atoms;
-void prop_startup();
+void prop_startup(void);
gboolean prop_get32(Window win, Atom prop, Atom type, guint32 *ret);
gboolean prop_get_array32(Window win, Atom prop, Atom type, guint32 **ret,
extern gchar **screen_desktop_names;
/*! Take over the screen, set the basic hints on it claming it as ours */
-gboolean screen_annex();
+gboolean screen_annex(void);
/*! Once the screen is ours, set up its initial state */
void screen_startup(gboolean reconfig);
void screen_shutdown(gboolean reconfig);
/*! Figure out the new size of the screen and adjust stuff for it */
-void screen_resize();
+void screen_resize(void);
/*! Change the number of available desktops */
void screen_set_num_desktops(guint num);
/*! Show the desktop popup/notification */
void screen_show_desktop_popup(guint d);
/*! Hide it */
-void screen_hide_desktop_popup();
+void screen_hide_desktop_popup(void);
/*! Shows and focuses the desktop and hides all the client windows, or
returns to the normal state, showing client windows.
void screen_show_desktop(gboolean show, struct _ObClient *show_only);
/*! Updates the desktop layout from the root property if available */
-void screen_update_layout();
+void screen_update_layout(void);
/*! Get desktop names from the root window property */
-void screen_update_desktop_names();
+void screen_update_desktop_names(void);
/*! Installs or uninstalls a colormap for a client. If client is NULL, then
it handles the root colormap. */
void screen_install_colormap(struct _ObClient *client, gboolean install);
-void screen_update_areas();
+void screen_update_areas(void);
-Rect *screen_physical_area_all_monitors();
+Rect *screen_physical_area_all_monitors(void);
Rect *screen_physical_area_monitor(guint head);
-Rect *screen_physical_area_active();
+Rect *screen_physical_area_active(void);
/* doesn't include struts which the search area is already outside of when
'search' is not NULL */
/*! Sets the root cursor. This function decides which cursor to use, but you
gotta call it to let it know it should change. */
-void screen_set_root_cursor();
+void screen_set_root_cursor(void);
/*! Gives back the pointer's position in x and y. Returns TRUE if the pointer
is on this screen and FALSE if it is on another screen. */
}
/*! Connect to the session manager and set up our callback functions */
-static gboolean session_connect()
+static gboolean session_connect(void)
{
SmcCallbacks cb;
gchar *oldid;
return sm_conn != NULL;
}
-static void session_setup_program()
+static void session_setup_program(void)
{
SmPropValue vals = {
.value = sm_argv[0],
g_free(prop.type);
}
-static void session_setup_user()
+static void session_setup_user(void)
{
char *user = g_strdup(g_get_user_name());
g_free(prop.type);
}
-static void session_setup_pid()
+static void session_setup_pid(void)
{
gchar *pid = g_strdup_printf("%ld", (glong) getpid());
}
/*! This is a gnome-session-manager extension */
-static void session_setup_priority()
+static void session_setup_priority(void)
{
gchar priority = 20; /* 20 is a lower prioity to run before other apps */
g_free(prop.type);
}
-static void session_setup_clone_command()
+static void session_setup_clone_command(void)
{
gint i;
g_free(vals);
}
-static void session_setup_restart_command()
+static void session_setup_restart_command(void)
{
gint i;
g_free(vals);
}
-static ObSMSaveData *sm_save_get_data()
+static ObSMSaveData *sm_save_get_data(void)
{
ObSMSaveData *savedata = g_new0(ObSMSaveData, 1);
/* save the active desktop and client.
/*! Sets the window stacking list on the root window from the
stacking_list */
-void stacking_set_list();
+void stacking_set_list(void);
void stacking_add(struct _ObWindow *win);
void stacking_add_nonintrusive(struct _ObWindow *win);
void stacking_temp_raise(struct _ObWindow *window);
/*! Restores any temporarily raised windows to their correct place */
-void stacking_restore();
+void stacking_restore(void);
/*! Lowers a window below all others in its stacking layer */
void stacking_lower(struct _ObWindow *window);
void sn_startup(gboolean reconfig);
void sn_shutdown(gboolean reconfig);
-gboolean sn_app_starting();
+gboolean sn_app_starting(void);
/*! Notify that an app has started
@param wmclass the WM_CLASS[1] hint
/* Tell startup notification we're not actually running the program we
told it we were
*/
-void sn_spawn_cancel();
+void sn_spawn_cancel(void);
#endif
typedef void (*ParseCallback)(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
gpointer data);
-ObParseInst* parse_startup();
+ObParseInst* parse_startup(void);
void parse_shutdown(ObParseInst *inst);
/*! Loads Openbox's rc, from the normal paths
/* paths */
-void parse_paths_startup();
-void parse_paths_shutdown();
+void parse_paths_startup(void);
+void parse_paths_shutdown(void);
-const gchar* parse_xdg_config_home_path();
-const gchar* parse_xdg_data_home_path();
-GSList* parse_xdg_config_dir_paths();
-GSList* parse_xdg_data_dir_paths();
+const gchar* parse_xdg_config_home_path(void);
+const gchar* parse_xdg_data_home_path(void);
+GSList* parse_xdg_config_dir_paths(void);
+GSList* parse_xdg_data_dir_paths(void);
/*! Expands the ~ character to the home directory throughout the given
string */
#
msgid ""
msgstr ""
-"Project-Id-Version: openbox 3.999.0\n"
+"Project-Id-Version: openbox 3.4.7-pre1\n"
"Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
"POT-Creation-Date: 2008-02-28 23:00+0100\n"
"PO-Revision-Date: 2008-02-28 23:00+0100\n"
#
msgid ""
msgstr ""
-"Project-Id-Version: openbox 3.999.0\n"
+"Project-Id-Version: openbox 3.4.7-pre1\n"
"Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
"POT-Creation-Date: 2008-02-28 23:00+0100\n"
"PO-Revision-Date: 2008-02-28 23:00+0100\n"