/* window object */ /* vim: set sw=2 et: */ /* * Copyright (C) 2001 Havoc Pennington * Copyright (C) 2006-2007 Vincent Untz * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, see . */ #if !defined (__LIBWNCK_H_INSIDE__) && !defined (WNCK_COMPILATION) #error "Only can be included directly." #endif #ifndef WNCK_WINDOW_H #define WNCK_WINDOW_H #ifndef WNCK_I_KNOW_THIS_IS_UNSTABLE #error "libwnck should only be used if you understand that it's subject to frequent change, and is not supported as a fixed API/ABI or as part of the platform" #endif #include #include #include G_BEGIN_DECLS /** * WnckWindowState: * @WNCK_WINDOW_STATE_MINIMIZED: the window is minimized. * @WNCK_WINDOW_STATE_MAXIMIZED_HORIZONTALLY: the window is horizontically * maximized. * @WNCK_WINDOW_STATE_MAXIMIZED_VERTICALLY: the window is vertically maximized. * @WNCK_WINDOW_STATE_SHADED: the window is shaded. * @WNCK_WINDOW_STATE_SKIP_PAGER: the window should not be included on pagers. * @WNCK_WINDOW_STATE_SKIP_TASKLIST: the window should not be included on * tasklists. * @WNCK_WINDOW_STATE_STICKY: the window is sticky (see * wnck_window_is_sticky()). * @WNCK_WINDOW_STATE_HIDDEN: the window is not visible on its #WnckWorkspace * and viewport (when minimized, for example). * @WNCK_WINDOW_STATE_FULLSCREEN: the window is fullscreen. * @WNCK_WINDOW_STATE_DEMANDS_ATTENTION: the window needs attention (because * the window requested activation but the window manager refused it, for * example). * @WNCK_WINDOW_STATE_URGENT: the window requires a response from the user. * @WNCK_WINDOW_STATE_ABOVE: the window is above other windows (see * wnck_window_make_above()). * @WNCK_WINDOW_STATE_BELOW: the window is below other windows (see * wnck_window_make_below()). * * Type used as a bitmask to describe the state of a #WnckWindow. */ typedef enum { WNCK_WINDOW_STATE_MINIMIZED = 1 << 0, WNCK_WINDOW_STATE_MAXIMIZED_HORIZONTALLY = 1 << 1, WNCK_WINDOW_STATE_MAXIMIZED_VERTICALLY = 1 << 2, WNCK_WINDOW_STATE_SHADED = 1 << 3, WNCK_WINDOW_STATE_SKIP_PAGER = 1 << 4, WNCK_WINDOW_STATE_SKIP_TASKLIST = 1 << 5, WNCK_WINDOW_STATE_STICKY = 1 << 6, WNCK_WINDOW_STATE_HIDDEN = 1 << 7, WNCK_WINDOW_STATE_FULLSCREEN = 1 << 8, WNCK_WINDOW_STATE_DEMANDS_ATTENTION = 1 << 9, WNCK_WINDOW_STATE_URGENT = 1 << 10, WNCK_WINDOW_STATE_ABOVE = 1 << 11, WNCK_WINDOW_STATE_BELOW = 1 << 12 } WnckWindowState; /** * WnckWindowActions: * @WNCK_WINDOW_ACTION_MOVE: the window may be moved around the screen. * @WNCK_WINDOW_ACTION_RESIZE: the window may be resized. * @WNCK_WINDOW_ACTION_SHADE: the window may be shaded. * @WNCK_WINDOW_ACTION_STICK: the window may be sticked. * @WNCK_WINDOW_ACTION_MAXIMIZE_HORIZONTALLY: the window may be maximized * horizontally. * @WNCK_WINDOW_ACTION_MAXIMIZE_VERTICALLY: the window may be maximized * vertically. * @WNCK_WINDOW_ACTION_CHANGE_WORKSPACE: the window may be moved between * workspaces, or (un)pinned. * @WNCK_WINDOW_ACTION_CLOSE: the window may be closed. * @WNCK_WINDOW_ACTION_UNMAXIMIZE_HORIZONTALLY: the window may be unmaximized * horizontally. * @WNCK_WINDOW_ACTION_UNMAXIMIZE_VERTICALLY: the window may be maximized * vertically. * @WNCK_WINDOW_ACTION_UNSHADE: the window may be unshaded. * @WNCK_WINDOW_ACTION_UNSTICK: the window may be unsticked. * @WNCK_WINDOW_ACTION_MINIMIZE: the window may be minimized. * @WNCK_WINDOW_ACTION_UNMINIMIZE: the window may be unminimized. * @WNCK_WINDOW_ACTION_MAXIMIZE: the window may be maximized. * @WNCK_WINDOW_ACTION_UNMAXIMIZE: the window may be unmaximized. * @WNCK_WINDOW_ACTION_FULLSCREEN: the window may be brought to fullscreen. * @WNCK_WINDOW_ACTION_ABOVE: the window may be made above other windows. * @WNCK_WINDOW_ACTION_BELOW: the window may be made below other windows. * * Type used as a bitmask to describe the actions that can be done for a * #WnckWindow. */ typedef enum { WNCK_WINDOW_ACTION_MOVE = 1 << 0, WNCK_WINDOW_ACTION_RESIZE = 1 << 1, WNCK_WINDOW_ACTION_SHADE = 1 << 2, WNCK_WINDOW_ACTION_STICK = 1 << 3, WNCK_WINDOW_ACTION_MAXIMIZE_HORIZONTALLY = 1 << 4, WNCK_WINDOW_ACTION_MAXIMIZE_VERTICALLY = 1 << 5, WNCK_WINDOW_ACTION_CHANGE_WORKSPACE = 1 << 6, /* includes pin/unpin */ WNCK_WINDOW_ACTION_CLOSE = 1 << 7, WNCK_WINDOW_ACTION_UNMAXIMIZE_HORIZONTALLY = 1 << 8, WNCK_WINDOW_ACTION_UNMAXIMIZE_VERTICALLY = 1 << 9, WNCK_WINDOW_ACTION_UNSHADE = 1 << 10, WNCK_WINDOW_ACTION_UNSTICK = 1 << 11, WNCK_WINDOW_ACTION_MINIMIZE = 1 << 12, WNCK_WINDOW_ACTION_UNMINIMIZE = 1 << 13, WNCK_WINDOW_ACTION_MAXIMIZE = 1 << 14, WNCK_WINDOW_ACTION_UNMAXIMIZE = 1 << 15, WNCK_WINDOW_ACTION_FULLSCREEN = 1 << 16, WNCK_WINDOW_ACTION_ABOVE = 1 << 17, WNCK_WINDOW_ACTION_BELOW = 1 << 18 } WnckWindowActions; /** * WnckWindowType: * @WNCK_WINDOW_NORMAL: the window is a normal window. * @WNCK_WINDOW_DESKTOP: the window is a desktop. * @WNCK_WINDOW_DOCK: the window is a dock or a panel. * @WNCK_WINDOW_DIALOG: the window is a dialog window. * @WNCK_WINDOW_TOOLBAR: the window is a tearoff toolbar. * @WNCK_WINDOW_MENU: the window is a tearoff menu. * @WNCK_WINDOW_UTILITY: the window is a small persistent utility window, such * as a palette or toolbox. * @WNCK_WINDOW_SPLASHSCREEN: the window is a splash screen displayed as an * application is starting up. * * Type describing the semantic type of a #WnckWindow. */ typedef enum { WNCK_WINDOW_NORMAL, /* document/app window */ WNCK_WINDOW_DESKTOP, /* desktop background */ WNCK_WINDOW_DOCK, /* panel */ WNCK_WINDOW_DIALOG, /* dialog */ WNCK_WINDOW_TOOLBAR, /* tearoff toolbar */ WNCK_WINDOW_MENU, /* tearoff menu */ WNCK_WINDOW_UTILITY, /* palette/toolbox window */ WNCK_WINDOW_SPLASHSCREEN /* splash screen */ } WnckWindowType; /** * WnckWindowGravity: * @WNCK_WINDOW_GRAVITY_CURRENT: keep the current gravity point. * @WNCK_WINDOW_GRAVITY_NORTHWEST: use the left top corner of the frame window * as gravity point. * @WNCK_WINDOW_GRAVITY_NORTH: use the center of the frame window's top side as * gravity point. * @WNCK_WINDOW_GRAVITY_NORTHEAST: use the right top corner of the frame window * as gravity point. * @WNCK_WINDOW_GRAVITY_WEST: use the center of the frame window's left side as * gravity point. * @WNCK_WINDOW_GRAVITY_CENTER: use the center of the frame window as gravity * point. * @WNCK_WINDOW_GRAVITY_EAST: use the center of the frame window's right side * as gravity point. * @WNCK_WINDOW_GRAVITY_SOUTHWEST: use the left bottom corner of the frame * window as gravity point. * @WNCK_WINDOW_GRAVITY_SOUTH: use the center of the frame window's bottom side * as gravity point. * @WNCK_WINDOW_GRAVITY_SOUTHEAST: use the right bottom corner of the frame * window as gravity point. * @WNCK_WINDOW_GRAVITY_STATIC: use the left top corner of the client window as * gravity point. * * Flag used when changing the geometry of a #WnckWindow. This is the gravity * point to use as a reference for the new position. * * Since: 2.16 */ typedef enum { WNCK_WINDOW_GRAVITY_CURRENT = 0, WNCK_WINDOW_GRAVITY_NORTHWEST = 1, WNCK_WINDOW_GRAVITY_NORTH = 2, WNCK_WINDOW_GRAVITY_NORTHEAST = 3, WNCK_WINDOW_GRAVITY_WEST = 4, WNCK_WINDOW_GRAVITY_CENTER = 5, WNCK_WINDOW_GRAVITY_EAST = 6, WNCK_WINDOW_GRAVITY_SOUTHWEST = 7, WNCK_WINDOW_GRAVITY_SOUTH = 8, WNCK_WINDOW_GRAVITY_SOUTHEAST = 9, WNCK_WINDOW_GRAVITY_STATIC = 10 } WnckWindowGravity; /** * WnckWindowMoveResizeMask: * @WNCK_WINDOW_CHANGE_X: X coordinate of the window should be changed. * @WNCK_WINDOW_CHANGE_Y: Y coordinate of the window should be changed. * @WNCK_WINDOW_CHANGE_WIDTH: width of the window should be changed. * @WNCK_WINDOW_CHANGE_HEIGHT: height of the window should be changed. * * Flag used as a bitmask when changing the geometry of a #WnckWindow. This * indicates which part of the geometry should be changed. * * Since: 2.16 */ typedef enum { WNCK_WINDOW_CHANGE_X = 1 << 0, WNCK_WINDOW_CHANGE_Y = 1 << 1, WNCK_WINDOW_CHANGE_WIDTH = 1 << 2, WNCK_WINDOW_CHANGE_HEIGHT = 1 << 3 } WnckWindowMoveResizeMask; #define WNCK_TYPE_WINDOW (wnck_window_get_type ()) #define WNCK_WINDOW(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), WNCK_TYPE_WINDOW, WnckWindow)) #define WNCK_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WNCK_TYPE_WINDOW, WnckWindowClass)) #define WNCK_IS_WINDOW(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), WNCK_TYPE_WINDOW)) #define WNCK_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WNCK_TYPE_WINDOW)) #define WNCK_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WNCK_TYPE_WINDOW, WnckWindowClass)) typedef struct _WnckWindowClass WnckWindowClass; typedef struct _WnckWindowPrivate WnckWindowPrivate; /** * WnckWindow: * * The #WnckWindow struct contains only private fields and should not be * directly accessed. */ struct _WnckWindow { GObject parent_instance; WnckWindowPrivate *priv; }; struct _WnckWindowClass { GObjectClass parent_class; /* window name or icon name changed */ void (* name_changed) (WnckWindow *window); /* minimized, maximized, sticky, skip pager, skip task, shaded * may have changed */ void (* state_changed) (WnckWindow *window, WnckWindowState changed_mask, WnckWindowState new_state); /* Changed workspace or pinned/unpinned state */ void (* workspace_changed) (WnckWindow *window); /* Changed icon */ void (* icon_changed) (WnckWindow *window); /* Changed actions */ void (* actions_changed) (WnckWindow *window, WnckWindowActions changed_mask, WnckWindowActions new_actions); /* Changed size/position */ void (* geometry_changed) (WnckWindow *window); /* Changed class group/instance name */ void (* class_changed) (WnckWindow *window); /* Changed role */ void (* role_changed) (WnckWindow *window); void (* type_changed) (WnckWindow *window); /* Padding for future expansion */ void (* pad1) (void); }; GType wnck_window_get_type (void) G_GNUC_CONST; WnckWindow* wnck_window_get (gulong xwindow); WnckScreen* wnck_window_get_screen (WnckWindow *window); gboolean wnck_window_has_name (WnckWindow *window); const char* wnck_window_get_name (WnckWindow *window); gboolean wnck_window_has_icon_name (WnckWindow *window); const char* wnck_window_get_icon_name (WnckWindow *window); WnckApplication* wnck_window_get_application (WnckWindow *window); WnckWindow* wnck_window_get_transient (WnckWindow *window); gulong wnck_window_get_group_leader (WnckWindow *window); gulong wnck_window_get_xid (WnckWindow *window); WnckClassGroup *wnck_window_get_class_group (WnckWindow *window); const char* wnck_window_get_class_group_name (WnckWindow *window); const char* wnck_window_get_class_instance_name (WnckWindow *window); const char* wnck_window_get_session_id (WnckWindow *window); const char* wnck_window_get_session_id_utf8 (WnckWindow *window); const char* wnck_window_get_role (WnckWindow *window); int wnck_window_get_pid (WnckWindow *window); gint wnck_window_get_sort_order (WnckWindow *window); void wnck_window_set_sort_order (WnckWindow *window, gint order); WnckWindowType wnck_window_get_window_type (WnckWindow *window); void wnck_window_set_window_type (WnckWindow *window, WnckWindowType wintype); gboolean wnck_window_is_minimized (WnckWindow *window); gboolean wnck_window_is_maximized_horizontally (WnckWindow *window); gboolean wnck_window_is_maximized_vertically (WnckWindow *window); gboolean wnck_window_is_maximized (WnckWindow *window); gboolean wnck_window_is_shaded (WnckWindow *window); gboolean wnck_window_is_above (WnckWindow *window); gboolean wnck_window_is_below (WnckWindow *window); gboolean wnck_window_is_skip_pager (WnckWindow *window); gboolean wnck_window_is_skip_tasklist (WnckWindow *window); gboolean wnck_window_is_fullscreen (WnckWindow *window); gboolean wnck_window_is_sticky (WnckWindow *window); gboolean wnck_window_needs_attention (WnckWindow *window); gboolean wnck_window_or_transient_needs_attention (WnckWindow *window); void wnck_window_set_skip_pager (WnckWindow *window, gboolean skip); void wnck_window_set_skip_tasklist (WnckWindow *window, gboolean skip); void wnck_window_set_fullscreen (WnckWindow *window, gboolean fullscreen); void wnck_window_close (WnckWindow *window, guint32 timestamp); void wnck_window_minimize (WnckWindow *window); void wnck_window_unminimize (WnckWindow *window, guint32 timestamp); void wnck_window_maximize (WnckWindow *window); void wnck_window_unmaximize (WnckWindow *window); void wnck_window_maximize_horizontally (WnckWindow *window); void wnck_window_unmaximize_horizontally (WnckWindow *window); void wnck_window_maximize_vertically (WnckWindow *window); void wnck_window_unmaximize_vertically (WnckWindow *window); void wnck_window_shade (WnckWindow *window); void wnck_window_unshade (WnckWindow *window); void wnck_window_make_above (WnckWindow *window); void wnck_window_unmake_above (WnckWindow *window); void wnck_window_make_below (WnckWindow *window); void wnck_window_unmake_below (WnckWindow *window); void wnck_window_stick (WnckWindow *window); void wnck_window_unstick (WnckWindow *window); void wnck_window_keyboard_move (WnckWindow *window); void wnck_window_keyboard_size (WnckWindow *window); WnckWorkspace* wnck_window_get_workspace (WnckWindow *window); void wnck_window_move_to_workspace (WnckWindow *window, WnckWorkspace *space); /* pinned = on all workspaces */ gboolean wnck_window_is_pinned (WnckWindow *window); void wnck_window_pin (WnckWindow *window); void wnck_window_unpin (WnckWindow *window); void wnck_window_activate (WnckWindow *window, guint32 timestamp); gboolean wnck_window_is_active (WnckWindow *window); gboolean wnck_window_is_most_recently_activated (WnckWindow *window); void wnck_window_activate_transient (WnckWindow *window, guint32 timestamp); gboolean wnck_window_transient_is_most_recently_activated (WnckWindow *window); GdkPixbuf* wnck_window_get_icon (WnckWindow *window); GdkPixbuf* wnck_window_get_mini_icon (WnckWindow *window); gboolean wnck_window_get_icon_is_fallback (WnckWindow *window); void wnck_window_set_icon_geometry (WnckWindow *window, int x, int y, int width, int height); WnckWindowActions wnck_window_get_actions (WnckWindow *window); WnckWindowState wnck_window_get_state (WnckWindow *window); void wnck_window_get_client_window_geometry (WnckWindow *window, int *xp, int *yp, int *widthp, int *heightp); void wnck_window_get_geometry (WnckWindow *window, int *xp, int *yp, int *widthp, int *heightp); void wnck_window_set_geometry (WnckWindow *window, WnckWindowGravity gravity, WnckWindowMoveResizeMask geometry_mask, int x, int y, int width, int height); gboolean wnck_window_is_visible_on_workspace (WnckWindow *window, WnckWorkspace *workspace); gboolean wnck_window_is_on_workspace (WnckWindow *window, WnckWorkspace *workspace); gboolean wnck_window_is_in_viewport (WnckWindow *window, WnckWorkspace *workspace); G_END_DECLS #endif /* WNCK_WINDOW_H */