1 /* 2 * This file is a part of the Cairo-Dock project 3 * 4 * Copyright : (C) see the 'copyright' file. 5 * E-mail : see the 'copyright' file. 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License 9 * as published by the Free Software Foundation; either version 3 10 * of the License, or (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * You should have received a copy of the GNU General Public License 17 * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 #ifndef __GLDI_WINDOWS_MANAGER__ 21 #define __GLDI_WINDOWS_MANAGER__ 22 23 #include "cairo-dock-struct.h" 24 #include "cairo-dock-manager.h" 25 G_BEGIN_DECLS 26 27 /** 28 *@file cairo-dock-windows-manager.h This class manages the windows actors and notifies for any change on them. 29 */ 30 31 // manager 32 typedef struct _GldiWindowsManager GldiWindowsManager; 33 34 #ifndef _MANAGER_DEF_ 35 extern GldiObjectManager myWindowObjectMgr; 36 #endif 37 38 /// signals 39 typedef enum { 40 NOTIFICATION_WINDOW_CREATED = NB_NOTIFICATIONS_OBJECT, 41 NOTIFICATION_WINDOW_DESTROYED, 42 NOTIFICATION_WINDOW_NAME_CHANGED, 43 NOTIFICATION_WINDOW_ICON_CHANGED, 44 NOTIFICATION_WINDOW_ATTENTION_CHANGED, 45 NOTIFICATION_WINDOW_SIZE_POSITION_CHANGED, 46 NOTIFICATION_WINDOW_STATE_CHANGED, 47 NOTIFICATION_WINDOW_CLASS_CHANGED, 48 NOTIFICATION_WINDOW_Z_ORDER_CHANGED, 49 NOTIFICATION_WINDOW_ACTIVATED, 50 NOTIFICATION_WINDOW_DESKTOP_CHANGED, 51 NB_NOTIFICATIONS_WINDOWS 52 } GldiWindowNotifications; 53 54 // data 55 56 /// Definition of the Windows Manager backend. 57 struct _GldiWindowManagerBackend { 58 GldiWindowActor* (*get_active_window) (void); 59 void (*move_to_nth_desktop) (GldiWindowActor *actor, int iNumDesktop, int iDeltaViewportX, int iDeltaViewportY); 60 void (*show) (GldiWindowActor *actor); 61 void (*close) (GldiWindowActor *actor); 62 void (*kill) (GldiWindowActor *actor); 63 void (*minimize) (GldiWindowActor *actor); 64 void (*lower) (GldiWindowActor *actor); 65 void (*maximize) (GldiWindowActor *actor, gboolean bMaximize); 66 void (*set_fullscreen) (GldiWindowActor *actor, gboolean bFullScreen); 67 void (*set_above) (GldiWindowActor *actor, gboolean bAbove); 68 void (*set_minimize_position) (GldiWindowActor *actor, int x, int y); 69 void (*set_thumbnail_area) (GldiWindowActor *actor, int x, int y, int w, int h); 70 void (*set_window_border) (GldiWindowActor *actor, gboolean bWithBorder); 71 cairo_surface_t* (*get_icon_surface) (GldiWindowActor *actor, int iWidth, int iHeight); 72 cairo_surface_t* (*get_thumbnail_surface) (GldiWindowActor *actor, int iWidth, int iHeight); 73 GLuint (*get_texture) (GldiWindowActor *actor); 74 GldiWindowActor* (*get_transient_for) (GldiWindowActor *actor); 75 void (*is_above_or_below) (GldiWindowActor *actor, gboolean *bIsAbove, gboolean *bIsBelow); 76 gboolean (*is_sticky) (GldiWindowActor *actor); 77 void (*set_sticky) (GldiWindowActor *actor, gboolean bSticky); 78 void (*can_minimize_maximize_close) (GldiWindowActor *actor, gboolean *bCanMinimize, gboolean *bCanMaximize, gboolean *bCanClose); 79 guint (*get_id) (GldiWindowActor *actor); 80 GldiWindowActor* (*pick_window) (void); // grab the mouse, wait for a click, then get the clicked window and returns its actor 81 } ; 82 83 /// Definition of a window actor. 84 struct _GldiWindowActor { 85 GldiObject object; 86 gboolean bDisplayed; /// not used yet... 87 gboolean bIsHidden; 88 gboolean bIsFullScreen; 89 gboolean bIsMaximized; 90 gboolean bDemandsAttention; 91 GtkAllocation windowGeometry; 92 gint iNumDesktop; // can be -1 93 gint iViewPortX, iViewPortY; 94 gint iStackOrder; 95 gchar *cClass; 96 gchar *cWmClass; 97 gchar *cName; 98 gchar *cLastAttentionDemand; 99 gint iAge; // age of the window (a mere growing integer). 100 gboolean bIsTransientFor; // TRUE if the window is transient (for a parent window). 101 }; 102 103 104 /** Register a Window Manager backend. NULL functions are simply ignored. 105 *@param pBackend a Window Manager backend 106 */ 107 void gldi_windows_manager_register_backend (GldiWindowManagerBackend *pBackend); 108 109 /** Run a function on each window actor. 110 *@param bOrderedByZ TRUE to sort by z-order, FALSE to sort by age 111 *@param callback the callback 112 *@param data user data 113 */ 114 void gldi_windows_foreach (gboolean bOrderedByZ, GFunc callback, gpointer data); 115 116 /** Run a function on each window actor. 117 *@param callback the callback (takes the actor and the data, returns TRUE to stop) 118 *@param data user data 119 *@return the found actor, or NULL 120 */ 121 GldiWindowActor *gldi_windows_find (gboolean (*callback) (GldiWindowActor*, gpointer), gpointer data); 122 123 /** Get the current active window actor. 124 *@return the actor, or NULL if no window is currently active 125 */ 126 GldiWindowActor* gldi_windows_get_active (void); 127 128 129 void gldi_window_move_to_desktop (GldiWindowActor *actor, int iNumDesktop, int iNumViewportX, int iNumViewportY); 130 131 void gldi_window_show (GldiWindowActor *actor); 132 void gldi_window_close (GldiWindowActor *actor); 133 void gldi_window_kill (GldiWindowActor *actor); 134 void gldi_window_minimize (GldiWindowActor *actor); 135 void gldi_window_lower (GldiWindowActor *actor); 136 void gldi_window_maximize (GldiWindowActor *actor, gboolean bMaximize); 137 void gldi_window_set_fullscreen (GldiWindowActor *actor, gboolean bFullScreen); 138 void gldi_window_set_above (GldiWindowActor *actor, gboolean bAbove); 139 140 void gldi_window_set_minimize_position (GldiWindowActor *actor, int x, int y); 141 142 void gldi_window_set_thumbnail_area (GldiWindowActor *actor, int x, int y, int w, int h); 143 144 void gldi_window_set_border (GldiWindowActor *actor, gboolean bWithBorder); 145 146 cairo_surface_t* gldi_window_get_icon_surface (GldiWindowActor *actor, int iWidth, int iHeight); 147 148 cairo_surface_t* gldi_window_get_thumbnail_surface (GldiWindowActor *actor, int iWidth, int iHeight); 149 150 GLuint gldi_window_get_texture (GldiWindowActor *actor); 151 152 GldiWindowActor* gldi_window_get_transient_for (GldiWindowActor *actor); 153 154 void gldi_window_is_above_or_below (GldiWindowActor *actor, gboolean *bIsAbove, gboolean *bIsBelow); 155 156 gboolean gldi_window_is_sticky (GldiWindowActor *actor); 157 158 void gldi_window_set_sticky (GldiWindowActor *actor, gboolean bSticky); 159 160 void gldi_window_can_minimize_maximize_close (GldiWindowActor *actor, gboolean *bCanMinimize, gboolean *bCanMaximize, gboolean *bCanClose); 161 162 163 gboolean gldi_window_is_on_current_desktop (GldiWindowActor *actor); 164 165 gboolean gldi_window_is_on_desktop (GldiWindowActor *pAppli, int iNumDesktop, int iNumViewportX, int iNumViewportY); 166 167 void gldi_window_move_to_current_desktop (GldiWindowActor *pAppli); 168 169 guint gldi_window_get_id (GldiWindowActor *pAppli); 170 171 GldiWindowActor *gldi_window_pick (void); 172 173 174 void gldi_register_windows_manager (void); 175 176 G_END_DECLS 177 #endif 178