diff options
Diffstat (limited to 'matchbox/mb-window-manager.h')
-rw-r--r-- | matchbox/mb-window-manager.h | 258 |
1 files changed, 258 insertions, 0 deletions
diff --git a/matchbox/mb-window-manager.h b/matchbox/mb-window-manager.h new file mode 100644 index 0000000..5c72845 --- /dev/null +++ b/matchbox/mb-window-manager.h @@ -0,0 +1,258 @@ +/* + * Matchbox Window Manager II - A lightweight window manager not for the + * desktop. + * + * Authored By Matthew Allum <mallum@o-hand.com> + * + * Copyright (c) 2005, 2007 OpenedHand Ltd - http://o-hand.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#ifndef _HAVE_MB_WM_WINDOW_MANAGER_H +#define _HAVE_MB_WM_WINDOW_MANAGER_H + +#include <matchbox/mb-wm-config.h> +#include <matchbox/mb-wm-object.h> +#include <matchbox/mb-wm-keys.h> +#include <matchbox/mb-wm-root-window.h> +#include <matchbox/mb-wm-theme.h> +#include <matchbox/mb-wm-layout.h> +#include <matchbox/mb-wm-main-context.h> +#if ENABLE_COMPOSITE +#include <matchbox/mb-wm-comp-mgr.h> +#endif +#include <matchbox/xas.h> + +/* XXX: we have a circular dependency between mb-wm-main-context.h + * and mb-window-manager.h */ +#ifndef MB_WM_MAIN_CONTEXT_TYPEDEF_DEFINED +typedef struct MBWMMainContext MBWMMainContext; +#define MB_WM_MAIN_CONTEXT_TYPEDEF_DEFINED +#endif + +#define MB_WINDOW_MANAGER(c) ((MBWindowManager*)(c)) +#define MB_WINDOW_MANAGER_CLASS(c) ((MBWindowManagerClass*)(c)) +#define MB_TYPE_WINDOW_MANAGER (mb_wm_class_type ()) + +typedef struct MBWindowManagerClass MBWindowManagerClass; +typedef struct MBWindowManagerPriv MBWindowManagerPriv; + +typedef enum MBWindowManagerFlag +{ + MBWindowManagerFlagDesktop = (1<<0), + MBWindowManagerFlagAlwaysReloadTheme = (1<<1), +} MBWindowManagerFlag; + +typedef enum +{ + MBWindowManagerSignalThemeChange = 1, +} MBWindowManagerSingal; + +typedef enum +{ + MBWindowManagerCursorNone = 0, + MBWindowManagerCursorLeftPtr, + + _MBWindowManagerCursorLast +} MBWindowManagerCursor; + + +struct MBWindowManager +{ + MBWMObject parent; + + Display *xdpy; + unsigned int xdpy_width, xdpy_height; + int xscreen; + + MBWindowManagerClient *stack_top, *stack_bottom; + MBWMList *clients; + MBWindowManagerClient *desktop; + MBWindowManagerClient *focused_client; + + int n_desktops; + int active_desktop; + + Atom atoms[MBWM_ATOM_COUNT]; + + MBWMKeys *keys; /* Keybindings etc */ + + XasContext *xas_context; + + /* ### Private ### */ + MBWMSyncType sync_type; + int client_type_cnt; + int stack_n_clients; + MBWMRootWindow *root_win; + + const char *sm_client_id; + + MBWMTheme *theme; + MBWMLayout *layout; + MBWMMainContext *main_ctx; + MBWindowManagerFlag flags; +#if ENABLE_COMPOSITE + MBWMCompMgr *comp_mgr; + int damage_event_base; +#endif + + MBWindowManagerCursor cursor; + Cursor cursors[_MBWindowManagerCursorLast]; + + /* Temporary stuff, only valid during object initialization */ + const char *theme_path; + + MBWMModality modality_type; + + char **argv; + int argc; +}; + +struct MBWindowManagerClass +{ + MBWMObjectClass parent; + + void (*process_cmdline) (MBWindowManager * wm); + + MBWindowManagerClient* (*client_new) (MBWindowManager *wm, + MBWMClientWindow *w); + MBWMLayout * (*layout_new) (MBWindowManager *wm); + + /* These return True if now further action to be taken */ + Bool (*client_activate) (MBWindowManager *wm, MBWindowManagerClient *c); + Bool (*client_responding) (MBWindowManager *wm, MBWindowManagerClient *c); + Bool (*client_hang) (MBWindowManager *wm, MBWindowManagerClient *c); + + MBWMTheme * (*theme_new) (MBWindowManager *wm, const char * path); + +#if ENABLE_COMPOSITE + MBWMCompMgr * (*comp_mgr_new) (MBWindowManager *wm); +#endif + + void (*get_desktop_geometry) (MBWindowManager *wm, MBGeometry *geom); + + void (*main) (MBWindowManager *wm); +}; + +/** + * SECTION:matchbox2 + * @short_description: Core functions for creating and manipulating a + * #MBWindowManager + * + * The core object of Matchbox2 is the #MBWindowManager object, which + * is the first thing you would instantiate when implementing a new + * window manager. + */ + +MBWindowManager * +mb_wm_new (int argc, char **argv); + +MBWindowManager * +mb_wm_new_with_dpy (int argc, char **argv, Display * dpy); + +void +mb_wm_init (MBWindowManager * wm); + +void +mb_wm_set_layout (MBWindowManager *wm, MBWMLayout *layout); + +int +mb_wm_class_type (); + +void +mb_wm_main_loop(MBWindowManager *wm); + +MBWindowManagerClient* +mb_wm_managed_client_from_xwindow(MBWindowManager *wm, Window win); + +MBWindowManagerClient* +mb_wm_managed_client_from_frame (MBWindowManager *wm, Window frame); + +int +mb_wm_register_client_type (void); + +void +mb_wm_manage_client (MBWindowManager *wm, + MBWindowManagerClient *client, + Bool activate); + +void +mb_wm_unmanage_client (MBWindowManager *wm, + MBWindowManagerClient *client, + Bool destroy); + +void +mb_wm_display_sync_queue (MBWindowManager* wm, MBWMSyncType sync); + +void +mb_wm_get_display_geometry (MBWindowManager *wm, + MBGeometry *geometry); + +void +mb_wm_activate_client(MBWindowManager * wm, MBWindowManagerClient *c); + +void +mb_wm_handle_ping_reply (MBWindowManager * wm, MBWindowManagerClient *c); + +void +mb_wm_handle_hang_client (MBWindowManager * wm, MBWindowManagerClient *c); + +void +mb_wm_handle_show_desktop (MBWindowManager * wm, Bool show); + +void +mb_wm_toggle_desktop (MBWindowManager * wm); + +MBWindowManagerClient* +mb_wm_get_visible_main_client(MBWindowManager *wm); + +void +mb_wm_unfocus_client (MBWindowManager *wm, MBWindowManagerClient *client); + +void +mb_wm_cycle_apps (MBWindowManager *wm, Bool reverse); + +void +mb_wm_set_theme (MBWindowManager *wm, MBWMTheme * theme); + +void +mb_wm_set_theme_from_path (MBWindowManager *wm, const char *theme_path); + +void +mb_wm_set_cursor (MBWindowManager * wm, MBWindowManagerCursor cursor); + +void +mb_wm_compositing_on (MBWindowManager * wm); + +void +mb_wm_compositing_off (MBWindowManager * wm); + +Bool +mb_wm_compositing_enabled (MBWindowManager * wm); + +MBWMModality +mb_wm_get_modality_type (MBWindowManager * wm); + +void +mb_wm_sync (MBWindowManager *wm); + +void +mb_wm_set_n_desktops (MBWindowManager *wm, int n_desktops); + +void +mb_wm_select_desktop (MBWindowManager *wm, int desktop); + +int +mb_wm_util_pixels_to_points (MBWindowManager *wm, int pixels); + +#endif |