1 /*
2  * window-tracker-window: A window tracked by window tracker.
3  *
4  * Copyright 2012-2016 Stephan Haller <nomad@froevel.de>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19  * MA 02110-1301, USA.
20  *
21  *
22  */
23 
24 #ifndef __LIBXFDASHBOARD_WINDOW_TRACKER_WINDOW__
25 #define __LIBXFDASHBOARD_WINDOW_TRACKER_WINDOW__
26 
27 #if !defined(__LIBXFDASHBOARD_H_INSIDE__) && !defined(LIBXFDASHBOARD_COMPILATION)
28 #error "Only <libxfdashboard/libxfdashboard.h> can be included directly."
29 #endif
30 
31 #include <clutter/clutter.h>
32 #include <glib-object.h>
33 #include <gdk/gdk.h>
34 
35 #include <libxfdashboard/window-tracker-workspace.h>
36 #include <libxfdashboard/window-tracker-monitor.h>
37 
38 G_BEGIN_DECLS
39 
40 /* Public definitions */
41 /**
42  * XfdashboardWindowTrackerWindowState:
43  * @XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_HIDDEN: The window is not visible on its
44  *                                                  #XfdashboardWindowTrackerWorkspace,
45  *                                                  e.g. when minimized.
46  * @XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_MINIMIZED: The window is minimized.
47  * @XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_MAXIMIZED: The window is maximized.
48  * @XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_FULLSCREEN: The window is fullscreen.
49  * @XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_SKIP_PAGER: The window should not be included on pagers.
50  * @XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_SKIP_TASKLIST: The window should not be included on tasklists.
51  * @XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_PINNED: The window is on all workspaces.
52  * @XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_URGENT: The window requires a response from the user.
53  *
54  * Type used as a bitmask to describe the state of a #XfdashboardWindowTrackerWindow.
55  */
56 typedef enum /*< flags,prefix=XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE >*/
57 {
58 	XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_HIDDEN=1 << 0,
59 	XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_MINIMIZED=1 << 1,
60 	XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_MAXIMIZED=1 << 2,
61 	XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_FULLSCREEN=1 << 3,
62 	XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_SKIP_PAGER=1 << 4,
63 	XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_SKIP_TASKLIST=1 << 5,
64 	XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_PINNED=1 << 6,
65 	XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_URGENT=1 << 7,
66 } XfdashboardWindowTrackerWindowState;
67 
68 /**
69  * XfdashboardWindowTrackerWindowAction:
70  * @XFDASHBOARD_WINDOW_TRACKER_WINDOW_ACTION_CLOSE: The window may be closed.
71  *
72  * Type used as a bitmask to describe the actions that can be done for a #XfdashboardWindowTrackerWindow.
73  */
74 typedef enum /*< flags,prefix=XFDASHBOARD_WINDOW_TRACKER_WINDOW_ACTION >*/
75 {
76 	XFDASHBOARD_WINDOW_TRACKER_WINDOW_ACTION_CLOSE=1 << 0,
77 } XfdashboardWindowTrackerWindowAction;
78 
79 
80 /* Object declaration */
81 #define XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW				(xfdashboard_window_tracker_window_get_type())
82 #define XFDASHBOARD_WINDOW_TRACKER_WINDOW(obj)				(G_TYPE_CHECK_INSTANCE_CAST((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW, XfdashboardWindowTrackerWindow))
83 #define XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW(obj)			(G_TYPE_CHECK_INSTANCE_TYPE((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW))
84 #define XFDASHBOARD_WINDOW_TRACKER_WINDOW_GET_IFACE(obj)	(G_TYPE_INSTANCE_GET_INTERFACE((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW, XfdashboardWindowTrackerWindowInterface))
85 
86 typedef struct _XfdashboardWindowTrackerWindow				XfdashboardWindowTrackerWindow;
87 typedef struct _XfdashboardWindowTrackerWindowInterface		XfdashboardWindowTrackerWindowInterface;
88 
89 struct _XfdashboardWindowTrackerWindowInterface
90 {
91 	/*< private >*/
92 	/* Parent interface */
93 	GTypeInterface						parent_interface;
94 
95 	/*< public >*/
96 	/* Virtual functions */
97 	gboolean (*is_equal)(XfdashboardWindowTrackerWindow *inLeft, XfdashboardWindowTrackerWindow *inRight);
98 
99 	gboolean (*is_visible)(XfdashboardWindowTrackerWindow *self);
100 	void (*show)(XfdashboardWindowTrackerWindow *self);
101 	void (*hide)(XfdashboardWindowTrackerWindow *self);
102 
103 	XfdashboardWindowTrackerWindow* (*get_parent)(XfdashboardWindowTrackerWindow *self);
104 
105 	XfdashboardWindowTrackerWindowState (*get_state)(XfdashboardWindowTrackerWindow *self);
106 	XfdashboardWindowTrackerWindowAction (*get_actions)(XfdashboardWindowTrackerWindow *self);
107 
108 	const gchar* (*get_name)(XfdashboardWindowTrackerWindow *self);
109 
110 	GdkPixbuf* (*get_icon)(XfdashboardWindowTrackerWindow *self);
111 	const gchar* (*get_icon_name)(XfdashboardWindowTrackerWindow *self);
112 
113 	XfdashboardWindowTrackerWorkspace* (*get_workspace)(XfdashboardWindowTrackerWindow *self);
114 	gboolean (*is_on_workspace)(XfdashboardWindowTrackerWindow *self, XfdashboardWindowTrackerWorkspace *inWorkspace);
115 
116 	XfdashboardWindowTrackerMonitor* (*get_monitor)(XfdashboardWindowTrackerWindow *self);
117 	gboolean (*is_on_monitor)(XfdashboardWindowTrackerWindow *self, XfdashboardWindowTrackerMonitor *inMonitor);
118 
119 	void (*get_geometry)(XfdashboardWindowTrackerWindow *self, gint *outX, gint *outY, gint *outWidth, gint *outHeight);
120 	void (*set_geometry)(XfdashboardWindowTrackerWindow *self, gint inX, gint inY, gint inWidth, gint inHeight);
121 	void (*move)(XfdashboardWindowTrackerWindow *self, gint inX, gint inY);
122 	void (*resize)(XfdashboardWindowTrackerWindow *self, gint inWidth, gint inHeight);
123 	void (*move_to_workspace)(XfdashboardWindowTrackerWindow *self, XfdashboardWindowTrackerWorkspace *inWorkspace);
124 	void (*activate)(XfdashboardWindowTrackerWindow *self);
125 	void (*close)(XfdashboardWindowTrackerWindow *self);
126 
127 	gint (*get_pid)(XfdashboardWindowTrackerWindow *self);
128 	gchar** (*get_instance_names)(XfdashboardWindowTrackerWindow *self);
129 
130 	ClutterContent* (*get_content)(XfdashboardWindowTrackerWindow *self);
131 
132 	/* Signals */
133 	void (*name_changed)(XfdashboardWindowTrackerWindow *self);
134 	void (*state_changed)(XfdashboardWindowTrackerWindow *self,
135 							XfdashboardWindowTrackerWindowState inOldStates);
136 	void (*actions_changed)(XfdashboardWindowTrackerWindow *self,
137 							XfdashboardWindowTrackerWindowAction inOldActions);
138 	void (*icon_changed)(XfdashboardWindowTrackerWindow *self);
139 	void (*workspace_changed)(XfdashboardWindowTrackerWindow *self,
140 								XfdashboardWindowTrackerWorkspace *inOldWorkspace);
141 	void (*monitor_changed)(XfdashboardWindowTrackerWindow *self,
142 							XfdashboardWindowTrackerMonitor *inOldMonitor);
143 	void (*geometry_changed)(XfdashboardWindowTrackerWindow *self);
144 	void (*closed)(XfdashboardWindowTrackerWindow *self);
145 };
146 
147 /* Public API */
148 GType xfdashboard_window_tracker_window_get_type(void) G_GNUC_CONST;
149 
150 gboolean xfdashboard_window_tracker_window_is_equal(XfdashboardWindowTrackerWindow *inLeft,
151 													XfdashboardWindowTrackerWindow *inRight);
152 
153 gboolean xfdashboard_window_tracker_window_is_visible(XfdashboardWindowTrackerWindow *self);
154 gboolean xfdashboard_window_tracker_window_is_visible_on_workspace(XfdashboardWindowTrackerWindow *self,
155 																	XfdashboardWindowTrackerWorkspace *inWorkspace);
156 gboolean xfdashboard_window_tracker_window_is_visible_on_monitor(XfdashboardWindowTrackerWindow *self,
157 																	XfdashboardWindowTrackerMonitor *inMonitor);
158 void xfdashboard_window_tracker_window_show(XfdashboardWindowTrackerWindow *self);
159 void xfdashboard_window_tracker_window_hide(XfdashboardWindowTrackerWindow *self);
160 
161 XfdashboardWindowTrackerWindow* xfdashboard_window_tracker_window_get_parent(XfdashboardWindowTrackerWindow *self);
162 
163 XfdashboardWindowTrackerWindowState xfdashboard_window_tracker_window_get_state(XfdashboardWindowTrackerWindow *self);
164 XfdashboardWindowTrackerWindowAction xfdashboard_window_tracker_window_get_actions(XfdashboardWindowTrackerWindow *self);
165 
166 const gchar* xfdashboard_window_tracker_window_get_name(XfdashboardWindowTrackerWindow *self);
167 
168 GdkPixbuf* xfdashboard_window_tracker_window_get_icon(XfdashboardWindowTrackerWindow *self);
169 const gchar* xfdashboard_window_tracker_window_get_icon_name(XfdashboardWindowTrackerWindow *self);
170 
171 XfdashboardWindowTrackerWorkspace* xfdashboard_window_tracker_window_get_workspace(XfdashboardWindowTrackerWindow *self);
172 gboolean xfdashboard_window_tracker_window_is_on_workspace(XfdashboardWindowTrackerWindow *self,
173 															XfdashboardWindowTrackerWorkspace *inWorkspace);
174 void xfdashboard_window_tracker_window_move_to_workspace(XfdashboardWindowTrackerWindow *self,
175 															XfdashboardWindowTrackerWorkspace *inWorkspace);
176 
177 XfdashboardWindowTrackerMonitor* xfdashboard_window_tracker_window_get_monitor(XfdashboardWindowTrackerWindow *self);
178 gboolean xfdashboard_window_tracker_window_is_on_monitor(XfdashboardWindowTrackerWindow *self,
179 															XfdashboardWindowTrackerMonitor *inMonitor);
180 
181 void xfdashboard_window_tracker_window_get_geometry(XfdashboardWindowTrackerWindow *self,
182 															gint *outX,
183 															gint *outY,
184 															gint *outWidth,
185 															gint *outHeight);
186 void xfdashboard_window_tracker_window_set_geometry(XfdashboardWindowTrackerWindow *self,
187 															gint inX,
188 															gint inY,
189 															gint inWidth,
190 															gint inHeight);
191 void xfdashboard_window_tracker_window_move(XfdashboardWindowTrackerWindow *self,
192 											gint inX,
193 											gint inY);
194 void xfdashboard_window_tracker_window_resize(XfdashboardWindowTrackerWindow *self,
195 												gint inWidth,
196 												gint inHeight);
197 
198 void xfdashboard_window_tracker_window_activate(XfdashboardWindowTrackerWindow *self);
199 void xfdashboard_window_tracker_window_close(XfdashboardWindowTrackerWindow *self);
200 
201 gboolean xfdashboard_window_tracker_window_is_stage(XfdashboardWindowTrackerWindow *self);
202 ClutterStage* xfdashboard_window_tracker_window_get_stage(XfdashboardWindowTrackerWindow *self);
203 void xfdashboard_window_tracker_window_show_stage(XfdashboardWindowTrackerWindow *self);
204 void xfdashboard_window_tracker_window_hide_stage(XfdashboardWindowTrackerWindow *self);
205 
206 gint xfdashboard_window_tracker_window_get_pid(XfdashboardWindowTrackerWindow *self);
207 gchar** xfdashboard_window_tracker_window_get_instance_names(XfdashboardWindowTrackerWindow *self);
208 
209 ClutterContent* xfdashboard_window_tracker_window_get_content(XfdashboardWindowTrackerWindow *self);
210 
211 G_END_DECLS
212 
213 #endif	/* __LIBXFDASHBOARD_WINDOW_TRACKER_WINDOW__ */
214