Merge lp:~3v1n0/bamf/libreoffice-base-and-tests-0.3 into lp:bamf/0.3

Proposed by Marco Trevisan (Treviño) on 2012-10-10
Status: Merged
Approved by: Brandon Schaefer on 2012-10-10
Approved revision: 490
Merged at revision: 490
Proposed branch: lp:~3v1n0/bamf/libreoffice-base-and-tests-0.3
Merge into: lp:bamf/0.3
Diff against target: 1051 lines (+429/-112)
19 files modified
src/bamf-legacy-window-test.c (+62/-13)
src/bamf-legacy-window-test.h (+6/-2)
src/bamf-legacy-window.c (+27/-7)
src/bamf-legacy-window.h (+11/-3)
src/bamf-matcher.c (+25/-29)
src/bamf-unity-webapps-tab.c (+0/-1)
src/bamf-window.c (+5/-5)
src/bamf-window.h (+1/-1)
src/bamf-xutils.c (+55/-40)
src/bamf-xutils.h (+2/-2)
tests/bamfdaemon/data/libreoffice-base.desktop (+7/-0)
tests/bamfdaemon/data/libreoffice-calc.desktop (+7/-0)
tests/bamfdaemon/data/libreoffice-draw.desktop (+7/-0)
tests/bamfdaemon/data/libreoffice-impress.desktop (+7/-0)
tests/bamfdaemon/data/libreoffice-math.desktop (+7/-0)
tests/bamfdaemon/data/libreoffice-startcenter.desktop (+7/-0)
tests/bamfdaemon/data/libreoffice-writer.desktop (+7/-0)
tests/bamfdaemon/test-matcher.c (+166/-9)
tests/bamfdaemon/test-window.c (+20/-0)
To merge this branch: bzr merge lp:~3v1n0/bamf/libreoffice-base-and-tests-0.3
Reviewer Review Type Date Requested Status
Łukasz Zemczak Approve on 2012-10-11
Brandon Schaefer (community) 2012-10-10 Approve on 2012-10-10
Review via email: mp+129005@code.launchpad.net

Commit Message

BamfMatcher: add support for libreoffice Base, and add libreoffice matching tests

Description of the Change

To post a comment you must log in.
Brandon Schaefer (brandontschaefer) wrote :

Looks good +1

review: Approve
Łukasz Zemczak (sil2100) wrote :

Works for me.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/bamf-legacy-window-test.c'
2--- src/bamf-legacy-window-test.c 2012-07-31 15:11:20 +0000
3+++ src/bamf-legacy-window-test.c 2012-10-10 17:33:41 +0000
4@@ -127,16 +127,32 @@
5 }
6
7 void
8-bamf_legacy_window_test_set_name (BamfLegacyWindowTest *self, char *val)
9+bamf_legacy_window_test_set_name (BamfLegacyWindowTest *self, const char *val)
10 {
11 if (g_strcmp0 (self->name, val) == 0)
12 return;
13
14- self->name = val;
15+ self->name = g_strdup (val);
16
17 g_signal_emit_by_name (self, "name-changed");
18 }
19
20+void
21+bamf_legacy_window_test_set_wmclass (BamfLegacyWindowTest *self, const char *class_name, const char *instance_name)
22+{
23+ if (g_strcmp0 (self->wm_class_name, class_name) != 0)
24+ {
25+ g_free (self->wm_class_name);
26+ self->wm_class_name = g_strdup (class_name);
27+ }
28+
29+ if (g_strcmp0 (self->wm_class_instance, instance_name) != 0)
30+ {
31+ g_free (self->wm_class_instance);
32+ self->wm_class_instance = g_strdup (instance_name);
33+ }
34+}
35+
36 static const char *
37 bamf_legacy_window_test_get_name (BamfLegacyWindow *legacy_window)
38 {
39@@ -154,7 +170,7 @@
40
41 self = BAMF_LEGACY_WINDOW_TEST (legacy_window);
42
43- return self->wm_class_name;
44+ return self->wm_class_name;
45 }
46
47 static const char *
48@@ -164,7 +180,7 @@
49
50 self = BAMF_LEGACY_WINDOW_TEST (legacy_window);
51
52- return self->wm_class_instance;
53+ return self->wm_class_instance;
54 }
55
56 char *
57@@ -174,7 +190,7 @@
58
59 self = BAMF_LEGACY_WINDOW_TEST (legacy_window);
60
61- return self->exec;
62+ return g_strdup (self->exec);
63 }
64
65 char *
66@@ -185,7 +201,7 @@
67
68 self = BAMF_LEGACY_WINDOW_TEST (legacy_window);
69
70- return self->application_id;
71+ return g_strdup (self->application_id);
72 }
73
74 char *
75@@ -196,7 +212,7 @@
76
77 self = BAMF_LEGACY_WINDOW_TEST (legacy_window);
78
79- return self->unique_bus_name;
80+ return g_strdup (self->unique_bus_name);
81 }
82
83 char *
84@@ -207,7 +223,7 @@
85
86 self = BAMF_LEGACY_WINDOW_TEST (legacy_window);
87
88- return self->dbus_menu_object_path;
89+ return g_strdup (self->dbus_menu_object_path);
90 }
91
92 void
93@@ -328,10 +344,39 @@
94 return self->window_type;
95 }
96
97+char *
98+bamf_legacy_window_test_get_hint (BamfLegacyWindow *window, const char *name)
99+{
100+ g_return_val_if_fail (BAMF_IS_LEGACY_WINDOW_TEST (window), NULL);
101+ BamfLegacyWindowTest *self = BAMF_LEGACY_WINDOW_TEST (window);
102+
103+ return g_strdup (g_hash_table_lookup (self->hints, name));
104+}
105+
106 void
107-bamf_legacy_window_test_dispose (GObject *object)
108-{
109- G_OBJECT_CLASS (bamf_legacy_window_test_parent_class)->dispose (object);
110+bamf_legacy_window_test_set_hint (BamfLegacyWindow *window, const char *name, const char *value)
111+{
112+ g_return_if_fail (BAMF_IS_LEGACY_WINDOW_TEST (window));
113+ BamfLegacyWindowTest *self = BAMF_LEGACY_WINDOW_TEST (window);
114+
115+ return g_hash_table_insert (self->hints, g_strdup (name), g_strdup (value));
116+}
117+
118+static void
119+bamf_legacy_window_test_finalize (GObject *object)
120+{
121+ BamfLegacyWindowTest *self = BAMF_LEGACY_WINDOW_TEST (object);
122+
123+ g_free (self->name);
124+ g_free (self->wm_class_name);
125+ g_free (self->wm_class_instance);
126+ g_free (self->exec);
127+ g_free (self->application_id);
128+ g_free (self->unique_bus_name);
129+ g_free (self->dbus_menu_object_path);
130+ g_hash_table_unref (self->hints);
131+
132+ G_OBJECT_CLASS (bamf_legacy_window_test_parent_class)->finalize (object);
133 }
134
135 void
136@@ -340,7 +385,7 @@
137 BamfLegacyWindowClass *win_class = BAMF_LEGACY_WINDOW_CLASS (klass);
138 GObjectClass *obj_class = G_OBJECT_CLASS (klass);
139
140- obj_class->dispose = bamf_legacy_window_test_dispose;
141+ obj_class->finalize = bamf_legacy_window_test_finalize;
142 win_class->get_name = bamf_legacy_window_test_get_name;
143 win_class->get_class_name = bamf_legacy_window_test_get_class_name;
144 win_class->get_class_instance_name = bamf_legacy_window_test_get_class_instance_name;
145@@ -358,6 +403,8 @@
146 win_class->get_window_type = bamf_legacy_window_test_get_window_type;
147 win_class->maximized = bamf_legacy_window_test_maximized;
148 win_class->is_closed = bamf_legacy_window_test_is_closed;
149+ win_class->get_hint = bamf_legacy_window_test_get_hint;
150+ win_class->set_hint = bamf_legacy_window_test_set_hint;
151 win_class->reopen = bamf_legacy_window_test_reopen;
152 }
153
154@@ -368,6 +415,7 @@
155 self->pid = g_random_int_range (1, 100000);
156 self->maximized = BAMF_WINDOW_FLOATING;
157 self->is_closed = FALSE;
158+ self->hints = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
159 }
160
161
162@@ -394,12 +442,13 @@
163 copy->geometry = self->geometry;
164 copy->maximized = self->maximized;
165 copy->window_type = self->window_type;
166+ copy->hints = g_hash_table_ref (self->hints);
167
168 return copy;
169 }
170
171 BamfLegacyWindowTest *
172-bamf_legacy_window_test_new (guint32 xid, gchar *name, gchar *wmclass_name, gchar *exec)
173+bamf_legacy_window_test_new (guint32 xid, const gchar *name, const gchar *wmclass_name, const gchar *exec)
174 {
175 BamfLegacyWindowTest *self;
176
177
178=== modified file 'src/bamf-legacy-window-test.h'
179--- src/bamf-legacy-window-test.h 2012-08-21 22:01:48 +0000
180+++ src/bamf-legacy-window-test.h 2012-10-10 17:33:41 +0000
181@@ -68,6 +68,7 @@
182 GdkRectangle geometry;
183 BamfWindowMaximizationType maximized;
184 BamfWindowType window_type;
185+ GHashTable * hints;
186 };
187
188 struct _BamfLegacyWindowTestClass
189@@ -116,7 +117,7 @@
190 bamf_legacy_window_test_is_skip_tasklist (BamfLegacyWindow *legacy_window);
191
192 void
193-bamf_legacy_window_test_set_name (BamfLegacyWindowTest *self, char *val);
194+bamf_legacy_window_test_set_name (BamfLegacyWindowTest *self, const char *val);
195
196 void
197 bamf_legacy_window_test_set_geometry (BamfLegacyWindowTest *self, int x, int y,
198@@ -136,10 +137,13 @@
199 bamf_legacy_window_test_set_dbus_menu_object_path (BamfLegacyWindowTest *self, const char *object_path);
200
201 void
202+bamf_legacy_window_test_set_wmclass (BamfLegacyWindowTest *self, const char *class_name, const char *instance_name);
203+
204+void
205 bamf_legacy_window_test_close (BamfLegacyWindowTest *self);
206
207 BamfLegacyWindowTest *
208-bamf_legacy_window_test_new (guint32 xid, gchar *name, gchar *wmclass_name, gchar *exec);
209+bamf_legacy_window_test_new (guint32 xid, const gchar *name, const gchar *wmclass_name, const gchar *exec);
210
211 BamfLegacyWindowTest *
212 bamf_legacy_window_copy (BamfLegacyWindowTest *self);
213
214=== modified file 'src/bamf-legacy-window.c'
215--- src/bamf-legacy-window.c 2012-07-27 17:46:22 +0000
216+++ src/bamf-legacy-window.c 2012-10-10 17:33:41 +0000
217@@ -429,15 +429,35 @@
218 }
219
220 char *
221-bamf_legacy_window_get_utf8_xprop (BamfLegacyWindow *self, const char* prop)
222+bamf_legacy_window_get_hint (BamfLegacyWindow *self, const char *name)
223 {
224 g_return_val_if_fail (BAMF_IS_LEGACY_WINDOW (self), NULL);
225-
226- if (!self->priv->legacy_window)
227- return NULL;
228-
229- guint xid = bamf_legacy_window_get_xid (self);
230- return bamf_xutils_get_window_hint (xid, prop, XInternAtom(gdk_x11_get_default_xdisplay (), "UTF8_STRING", False));
231+ g_return_val_if_fail (name, NULL);
232+
233+ if (BAMF_LEGACY_WINDOW_GET_CLASS (self)->get_hint)
234+ return BAMF_LEGACY_WINDOW_GET_CLASS (self)->get_hint (self, name);
235+
236+ g_return_val_if_fail (WNCK_IS_WINDOW (self->priv->legacy_window), NULL);
237+
238+ guint xid = bamf_legacy_window_get_xid (self);
239+
240+ return bamf_xutils_get_string_window_hint (xid, name);
241+}
242+
243+void
244+bamf_legacy_window_set_hint (BamfLegacyWindow *self, const char *name, const char *value)
245+{
246+ g_return_if_fail (BAMF_IS_LEGACY_WINDOW (self));
247+ g_return_if_fail (name);
248+
249+ if (BAMF_LEGACY_WINDOW_GET_CLASS (self)->set_hint)
250+ return BAMF_LEGACY_WINDOW_GET_CLASS (self)->set_hint (self, name, value);
251+
252+ g_return_if_fail (WNCK_IS_WINDOW (self->priv->legacy_window));
253+
254+ guint xid = bamf_legacy_window_get_xid (self);
255+
256+ bamf_xutils_set_string_window_hint (xid, name, value);
257 }
258
259 static void
260
261=== modified file 'src/bamf-legacy-window.h'
262--- src/bamf-legacy-window.h 2012-08-21 22:01:48 +0000
263+++ src/bamf-legacy-window.h 2012-10-10 17:33:41 +0000
264@@ -77,6 +77,8 @@
265 char * (*get_app_id) (BamfLegacyWindow *legacy_window);
266 char * (*get_unique_bus_name) (BamfLegacyWindow *legacy_window);
267 char * (*get_menu_object_path) (BamfLegacyWindow *legacy_window);
268+ char * (*get_hint) (BamfLegacyWindow *legacy_window,
269+ const gchar *name);
270 gint (*get_pid) (BamfLegacyWindow *legacy_window);
271 guint32 (*get_xid) (BamfLegacyWindow *legacy_window);
272 gboolean (*needs_attention) (BamfLegacyWindow *legacy_window);
273@@ -88,8 +90,9 @@
274 BamfWindowMaximizationType (*maximized) (BamfLegacyWindow *legacy_window);
275 BamfWindowType (*get_window_type) (BamfLegacyWindow *legacy_window);
276 void (*get_geometry) (BamfLegacyWindow *legacy_window,
277- gint *x, gint *y,
278- gint *width, gint *height);
279+ gint *x, gint *y, gint *w, gint *h);
280+ void (*set_hint) (BamfLegacyWindow *legacy_window,
281+ const gchar *name, const gchar *value);
282 void (*reopen) (BamfLegacyWindow *legacy_window);
283
284 /*< signals >*/
285@@ -141,7 +144,12 @@
286
287 BamfLegacyWindow * bamf_legacy_window_get_transient (BamfLegacyWindow *self);
288
289-char * bamf_legacy_window_get_utf8_xprop (BamfLegacyWindow *self, const char* prop);
290+char * bamf_legacy_window_get_hint (BamfLegacyWindow *self,
291+ const char *name);
292+
293+void bamf_legacy_window_set_hint (BamfLegacyWindow *self,
294+ const char *name,
295+ const char *value);
296
297 gint bamf_legacy_window_get_stacking_position (BamfLegacyWindow *self);
298
299
300=== modified file 'src/bamf-matcher.c'
301--- src/bamf-matcher.c 2012-10-08 10:24:47 +0000
302+++ src/bamf-matcher.c 2012-10-10 17:33:41 +0000
303@@ -26,7 +26,6 @@
304 #include "bamf-window.h"
305 #include "bamf-legacy-screen.h"
306 #include "bamf-indicator-source.h"
307-#include "bamf-xutils.h"
308
309 #ifdef HAVE_WEBAPPS
310 #include "bamf-unity-webapps-application.h"
311@@ -370,6 +369,11 @@
312 binary = "libreoffice";
313 parameter = "draw";
314 }
315+ else if (g_str_has_suffix (name, "LibreOffice Base"))
316+ {
317+ binary = "libreoffice";
318+ parameter = "base";
319+ }
320 else if (g_strcmp0 (class, "libreoffice-startcenter") == 0)
321 {
322 binary = "libreoffice";
323@@ -403,6 +407,11 @@
324 binary = "ooffice";
325 parameter = "draw";
326 }
327+ else if (g_str_has_suffix (name, "OpenOffice.org Base"))
328+ {
329+ binary = "ooffice";
330+ parameter = "base";
331+ }
332 else if (g_strcmp0 (name, "OpenOffice.org") == 0 && type == BAMF_WINDOW_NORMAL)
333 {
334 binary = "ooffice";
335@@ -437,6 +446,11 @@
336 binary = "libreoffice";
337 parameter = "draw";
338 }
339+ else if (g_strcmp0 (class, "libreoffice-base") == 0)
340+ {
341+ binary = "libreoffice";
342+ parameter = "base";
343+ }
344 }
345
346 if (!binary)
347@@ -1398,24 +1412,6 @@
348 }
349
350 static char *
351-get_window_hint (BamfLegacyWindow *window, const char *atom_name)
352-{
353- g_return_val_if_fail (BAMF_IS_LEGACY_WINDOW (window), NULL);
354-
355- Window xid = bamf_legacy_window_get_xid (window);
356- return bamf_xutils_get_window_hint (xid, atom_name, XA_STRING);
357-}
358-
359-static void
360-set_window_hint (BamfLegacyWindow * window, const char *atom_name, const char *data)
361-{
362- g_return_if_fail (BAMF_LEGACY_WINDOW (window));
363-
364- Window xid = bamf_legacy_window_get_xid (window);
365- bamf_xutils_set_window_hint (xid, atom_name, XA_STRING, data);
366-}
367-
368-static char *
369 process_exec_string (gint pid)
370 {
371 gchar *result = NULL;
372@@ -1655,7 +1651,7 @@
373
374 priv = self->priv;
375 window = bamf_window_get_window (bamf_window);
376- desktop_file = get_window_hint (window, _NET_WM_DESKTOP_FILE);
377+ desktop_file = bamf_legacy_window_get_hint (window, _NET_WM_DESKTOP_FILE);
378 class_name = bamf_legacy_window_get_class_name (window);
379 instance_name = bamf_legacy_window_get_class_instance_name (window);
380
381@@ -1972,7 +1968,7 @@
382 return;
383 }
384
385- desktop_file_hint = get_window_hint (window, _NET_WM_DESKTOP_FILE);
386+ desktop_file_hint = bamf_legacy_window_get_hint (window, _NET_WM_DESKTOP_FILE);
387
388 if (desktop_file_hint)
389 {
390@@ -2009,7 +2005,7 @@
391 g_array_free (pids, TRUE);
392
393 if (desktop_file_hint)
394- set_window_hint (window, _NET_WM_DESKTOP_FILE, desktop_file_hint);
395+ bamf_legacy_window_set_hint (window, _NET_WM_DESKTOP_FILE, desktop_file_hint);
396 }
397
398 static void
399@@ -2054,7 +2050,7 @@
400 char *old_hint;
401 const char *new_hint;
402
403- old_hint = get_window_hint (window, _NET_WM_DESKTOP_FILE);
404+ old_hint = bamf_legacy_window_get_hint (window, _NET_WM_DESKTOP_FILE);
405 new_hint = get_open_office_window_hint (self, window);
406
407 if (new_hint && g_strcmp0 (new_hint, old_hint) != 0)
408@@ -2083,7 +2079,7 @@
409 g_return_val_if_fail (BAMF_IS_MATCHER (self), NULL);
410 g_return_val_if_fail (BAMF_IS_LEGACY_WINDOW (window), NULL);
411
412- role = get_window_hint (window, WM_WINDOW_ROLE);
413+ role = bamf_legacy_window_get_hint (window, WM_WINDOW_ROLE);
414 exec = g_strconcat ("gnome-control-center", (role ? " " : NULL), role, NULL);
415
416 desktopFileTable = self->priv->desktop_file_table;
417@@ -2109,7 +2105,7 @@
418 char *old_hint;
419 const char *new_hint;
420
421- old_hint = get_window_hint (window, _NET_WM_DESKTOP_FILE);
422+ old_hint = bamf_legacy_window_get_hint (window, _NET_WM_DESKTOP_FILE);
423 new_hint = get_gnome_control_center_window_hint (self, window);
424
425 if (new_hint && g_strcmp0 (new_hint, old_hint) != 0)
426@@ -2150,12 +2146,12 @@
427 return;
428 }
429
430- char *old_hint = get_window_hint (window, _NET_WM_DESKTOP_FILE);
431+ char *old_hint = bamf_legacy_window_get_hint (window, _NET_WM_DESKTOP_FILE);
432 const char *new_hint = get_open_office_window_hint (self, window);
433
434 if (new_hint && g_strcmp0 (old_hint, new_hint) != 0)
435 {
436- set_window_hint (window, _NET_WM_DESKTOP_FILE, new_hint);
437+ bamf_legacy_window_set_hint (window, _NET_WM_DESKTOP_FILE, new_hint);
438 }
439
440 g_object_ref (window);
441@@ -2166,12 +2162,12 @@
442 }
443 else if (g_strcmp0 (bamf_legacy_window_get_class_name (window), "Gnome-control-center") == 0)
444 {
445- char *old_hint = get_window_hint (window, _NET_WM_DESKTOP_FILE);
446+ char *old_hint = bamf_legacy_window_get_hint (window, _NET_WM_DESKTOP_FILE);
447 const char *new_hint = get_gnome_control_center_window_hint (self, window);
448
449 if (new_hint && g_strcmp0 (old_hint, new_hint) != 0)
450 {
451- set_window_hint (window, _NET_WM_DESKTOP_FILE, new_hint);
452+ bamf_legacy_window_set_hint (window, _NET_WM_DESKTOP_FILE, new_hint);
453 }
454
455 g_object_ref (window);
456
457=== modified file 'src/bamf-unity-webapps-tab.c'
458--- src/bamf-unity-webapps-tab.c 2012-08-21 22:01:48 +0000
459+++ src/bamf-unity-webapps-tab.c 2012-10-10 17:33:41 +0000
460@@ -21,7 +21,6 @@
461 #include "bamf-unity-webapps-tab.h"
462 #include "bamf-matcher.h"
463
464-#include "bamf-xutils.h"
465 #include "bamf-legacy-window.h"
466 #include "bamf-legacy-screen.h"
467
468
469=== modified file 'src/bamf-window.c'
470--- src/bamf-window.c 2012-07-28 12:58:30 +0000
471+++ src/bamf-window.c 2012-10-10 17:33:41 +0000
472@@ -232,10 +232,10 @@
473 }
474
475 char *
476-bamf_window_get_xprop (BamfWindow *self, const char* prop)
477+bamf_window_get_string_hint (BamfWindow *self, const char* prop)
478 {
479 g_return_val_if_fail (BAMF_IS_WINDOW (self), NULL);
480- return bamf_legacy_window_get_utf8_xprop(self->priv->legacy_window, prop);
481+ return bamf_legacy_window_get_hint (self->priv->legacy_window, prop);
482 }
483
484 BamfWindowMaximizationType
485@@ -334,11 +334,11 @@
486 const gchar *prop,
487 BamfWindow *self)
488 {
489- char *bus_name = bamf_window_get_xprop (self, prop);
490+ char *hint = bamf_window_get_string_hint (self, prop);
491 g_dbus_method_invocation_return_value (invocation,
492- g_variant_new ("(s)", bus_name ? bus_name : ""));
493+ g_variant_new ("(s)", hint ? hint : ""));
494
495- g_free (bus_name);
496+ g_free (hint);
497
498 return TRUE;
499 }
500
501=== modified file 'src/bamf-window.h'
502--- src/bamf-window.h 2012-08-21 22:01:48 +0000
503+++ src/bamf-window.h 2012-10-10 17:33:41 +0000
504@@ -76,7 +76,7 @@
505
506 gint bamf_window_get_stack_position (BamfWindow *window);
507
508-char * bamf_window_get_xprop (BamfWindow *self, const char* prop);
509+char * bamf_window_get_string_hint (BamfWindow *self, const char* prop);
510
511 BamfWindowMaximizationType bamf_window_maximized (BamfWindow *self);
512
513
514=== modified file 'src/bamf-xutils.c'
515--- src/bamf-xutils.c 2012-04-19 18:58:57 +0000
516+++ src/bamf-xutils.c 2012-10-10 17:33:41 +0000
517@@ -44,69 +44,80 @@
518 return xdisplay;
519 }
520
521-char *
522-bamf_xutils_get_window_hint (Window xid, const char *atom_name, Atom type)
523+static void
524+bamf_xutils_get_string_window_hint_and_type (Window xid, const char *atom_name,
525+ gchar** return_hint, Atom* return_type)
526 {
527 Display *XDisplay;
528- Atom atom;
529- char *hint = NULL;
530- Atom result_type;
531 gint format;
532 gulong numItems;
533 gulong bytesAfter;
534+ Atom type;
535 unsigned char *buffer;
536- gboolean close_display = FALSE;
537-
538- g_return_val_if_fail ((xid != 0), NULL);
539- g_return_val_if_fail (atom_name, NULL);
540-
541+ gboolean close_display;
542+
543+ if (return_hint)
544+ *return_hint = NULL;
545+
546+ if (return_type)
547+ *return_type = AnyPropertyType;
548+
549+ g_return_if_fail (xid != 0);
550+ g_return_if_fail (return_hint || return_type);
551+
552+ close_display = FALSE;
553 XDisplay = get_xdisplay (&close_display);
554
555 if (!XDisplay)
556 {
557 g_warning ("%s: Unable to get a valid XDisplay", G_STRFUNC);
558- return NULL;
559+ return;
560 }
561
562- atom = XInternAtom (XDisplay, atom_name, FALSE);
563-
564- int result = XGetWindowProperty (XDisplay,
565- xid,
566- atom,
567- 0,
568- G_MAXINT,
569- FALSE,
570- type,
571- &result_type,
572- &format,
573- &numItems,
574- &bytesAfter,
575- &buffer);
576+ int result = XGetWindowProperty (XDisplay, xid,
577+ gdk_x11_get_xatom_by_name (atom_name),
578+ 0, G_MAXINT, False, AnyPropertyType,
579+ &type, &format, &numItems,
580+ &bytesAfter, &buffer);
581
582 if (close_display)
583 XCloseDisplay (XDisplay);
584
585 if (result == Success && numItems > 0)
586 {
587- if (buffer && buffer[0] != '\0')
588- hint = g_strdup ((char*) buffer);
589+ if (return_type)
590+ *return_type = type;
591+
592+ if (return_hint && buffer && buffer[0] != '\0')
593+ {
594+ if (type == XA_STRING || type == gdk_x11_get_xatom_by_name("UTF8_STRING"))
595+ *return_hint = g_strdup ((char*) buffer);
596+ }
597
598 XFree (buffer);
599 }
600+}
601+
602+char *
603+bamf_xutils_get_string_window_hint (Window xid, const char *atom_name)
604+{
605+ gchar *hint = NULL;
606+ bamf_xutils_get_string_window_hint_and_type (xid, atom_name, &hint, NULL);
607
608 return hint;
609 }
610
611 void
612-bamf_xutils_set_window_hint (Window xid, const char *atom_name, Atom type, const char *data)
613+bamf_xutils_set_string_window_hint (Window xid, const char *atom_name, const char *value)
614 {
615 Display *XDisplay;
616+ Atom type;
617 gboolean close_display = FALSE;
618
619 g_return_if_fail (xid != 0);
620 g_return_if_fail (atom_name);
621- g_return_if_fail (data);
622-
623+ g_return_if_fail (value);
624+
625 XDisplay = get_xdisplay (&close_display);
626
627 if (!XDisplay)
628@@ -115,16 +126,20 @@
629 return;
630 }
631
632- XChangeProperty (XDisplay,
633- xid,
634- XInternAtom (XDisplay,
635- atom_name,
636- FALSE),
637- type,
638- 8,
639- PropModeReplace,
640- (unsigned char *) data,
641- strlen (data));
642+ bamf_xutils_get_string_window_hint_and_type (xid, atom_name, NULL, &type);
643+
644+ if (type == AnyPropertyType)
645+ {
646+ type = XA_STRING;
647+ }
648+ else if (type != XA_STRING && type != gdk_x11_get_xatom_by_name("UTF8_STRING"))
649+ {
650+ g_error ("Impossible to set the atom %s on Window %lu", atom_name, xid);
651+ return;
652+ }
653+
654+ XChangeProperty (XDisplay, xid, gdk_x11_get_xatom_by_name (atom_name),
655+ type, 8, PropModeReplace, (unsigned char *) value, strlen (value));
656
657 if (close_display)
658 XCloseDisplay (XDisplay);
659
660=== modified file 'src/bamf-xutils.h'
661--- src/bamf-xutils.h 2012-04-18 20:12:33 +0000
662+++ src/bamf-xutils.h 2012-10-10 17:33:41 +0000
663@@ -26,8 +26,8 @@
664 #include <X11/Xlib.h>
665 #include <gdk/gdkx.h>
666
667-void bamf_xutils_set_window_hint (Window xid, const char *atom_name, Atom type, const char *data);
668-char* bamf_xutils_get_window_hint (Window xid, const char *atom_name, Atom type);
669+void bamf_xutils_set_string_window_hint (Window xid, const char *atom_name, const char *value);
670+char* bamf_xutils_get_string_window_hint (Window xid, const char *atom_name);
671
672 void bamf_xutils_get_window_class_hints (Window xid, char **class_instance_name, char **class_name);
673
674
675=== added file 'tests/bamfdaemon/data/libreoffice-base.desktop'
676--- tests/bamfdaemon/data/libreoffice-base.desktop 1970-01-01 00:00:00 +0000
677+++ tests/bamfdaemon/data/libreoffice-base.desktop 2012-10-10 17:33:41 +0000
678@@ -0,0 +1,7 @@
679+[Desktop Entry]
680+Version=1.0
681+Terminal=false
682+Icon=libreoffice-base
683+Type=Application
684+Exec=libreoffice --base %U
685+Name=LibreOffice Base
686
687=== added file 'tests/bamfdaemon/data/libreoffice-calc.desktop'
688--- tests/bamfdaemon/data/libreoffice-calc.desktop 1970-01-01 00:00:00 +0000
689+++ tests/bamfdaemon/data/libreoffice-calc.desktop 2012-10-10 17:33:41 +0000
690@@ -0,0 +1,7 @@
691+[Desktop Entry]
692+Version=1.0
693+Terminal=false
694+Icon=libreoffice-calc
695+Type=Application
696+Exec=libreoffice --calc %U
697+Name=LibreOffice Calc
698
699=== added file 'tests/bamfdaemon/data/libreoffice-draw.desktop'
700--- tests/bamfdaemon/data/libreoffice-draw.desktop 1970-01-01 00:00:00 +0000
701+++ tests/bamfdaemon/data/libreoffice-draw.desktop 2012-10-10 17:33:41 +0000
702@@ -0,0 +1,7 @@
703+[Desktop Entry]
704+Version=1.0
705+Terminal=false
706+Icon=libreoffice-draw
707+Type=Application
708+Exec=libreoffice --draw %U
709+Name=LibreOffice Draw
710
711=== added file 'tests/bamfdaemon/data/libreoffice-impress.desktop'
712--- tests/bamfdaemon/data/libreoffice-impress.desktop 1970-01-01 00:00:00 +0000
713+++ tests/bamfdaemon/data/libreoffice-impress.desktop 2012-10-10 17:33:41 +0000
714@@ -0,0 +1,7 @@
715+[Desktop Entry]
716+Version=1.0
717+Terminal=false
718+Icon=libreoffice-impress
719+Type=Application
720+Exec=libreoffice --impress %U
721+Name=LibreOffice Impress
722
723=== added file 'tests/bamfdaemon/data/libreoffice-math.desktop'
724--- tests/bamfdaemon/data/libreoffice-math.desktop 1970-01-01 00:00:00 +0000
725+++ tests/bamfdaemon/data/libreoffice-math.desktop 2012-10-10 17:33:41 +0000
726@@ -0,0 +1,7 @@
727+[Desktop Entry]
728+Version=1.0
729+Terminal=false
730+Icon=libreoffice-math
731+Type=Application
732+Exec=libreoffice --math %U
733+Name=LibreOffice Math
734
735=== added file 'tests/bamfdaemon/data/libreoffice-startcenter.desktop'
736--- tests/bamfdaemon/data/libreoffice-startcenter.desktop 1970-01-01 00:00:00 +0000
737+++ tests/bamfdaemon/data/libreoffice-startcenter.desktop 2012-10-10 17:33:41 +0000
738@@ -0,0 +1,7 @@
739+[Desktop Entry]
740+Version=1.0
741+Terminal=false
742+Icon=libreoffice-startcenter
743+Type=Application
744+Exec=libreoffice %U
745+Name=LibreOffice
746
747=== added file 'tests/bamfdaemon/data/libreoffice-writer.desktop'
748--- tests/bamfdaemon/data/libreoffice-writer.desktop 1970-01-01 00:00:00 +0000
749+++ tests/bamfdaemon/data/libreoffice-writer.desktop 2012-10-10 17:33:41 +0000
750@@ -0,0 +1,7 @@
751+[Desktop Entry]
752+Version=1.0
753+Terminal=false
754+Icon=libreoffice-writer
755+Type=Application
756+Exec=libreoffice --writer %U
757+Name=LibreOffice Writer
758
759=== modified file 'tests/bamfdaemon/test-matcher.c'
760--- tests/bamfdaemon/test-matcher.c 2012-07-30 03:00:23 +0000
761+++ tests/bamfdaemon/test-matcher.c 2012-10-10 17:33:41 +0000
762@@ -31,6 +31,7 @@
763 static void test_open_windows (void);
764 static void test_match_desktopless_application (void);
765 static void test_match_desktop_application (void);
766+static void test_match_libreoffice_windows (void);
767 static void test_new_desktop_matches_unmatched_windows (void);
768
769 static GDBusConnection *gdbus_connection = NULL;
770@@ -47,9 +48,10 @@
771 g_test_add_func (DOMAIN"/Allocation", test_allocation);
772 g_test_add_func (DOMAIN"/LoadDesktopFile", test_load_desktop_file);
773 g_test_add_func (DOMAIN"/OpenWindows", test_open_windows);
774- g_test_add_func (DOMAIN"/MatchDesktopLessApplication", test_match_desktopless_application);
775- g_test_add_func (DOMAIN"/MatchDesktopApplication", test_match_desktop_application);
776- g_test_add_func (DOMAIN"/NewMatchesUnmatchedWindows", test_new_desktop_matches_unmatched_windows);
777+ g_test_add_func (DOMAIN"/Matching/Application/DesktopLess", test_match_desktopless_application);
778+ g_test_add_func (DOMAIN"/Matching/Application/Desktop", test_match_desktop_application);
779+ g_test_add_func (DOMAIN"/Matching/Application/LibreOffice", test_match_libreoffice_windows);
780+ g_test_add_func (DOMAIN"/Matching/Windows/UnmatchedOnNewDesktop", test_new_desktop_matches_unmatched_windows);
781 }
782
783 static void
784@@ -66,6 +68,34 @@
785 g_clear_error (&error);
786 }
787
788+static void
789+cleanup_matcher_tables (BamfMatcher *matcher)
790+{
791+ g_return_if_fail (BAMF_IS_MATCHER (matcher));
792+
793+ g_hash_table_destroy (matcher->priv->desktop_file_table);
794+ g_hash_table_destroy (matcher->priv->desktop_id_table);
795+ g_hash_table_destroy (matcher->priv->desktop_class_table);
796+
797+ matcher->priv->desktop_file_table =
798+ g_hash_table_new_full ((GHashFunc) g_str_hash,
799+ (GEqualFunc) g_str_equal,
800+ (GDestroyNotify) g_free,
801+ NULL);
802+
803+ matcher->priv->desktop_id_table =
804+ g_hash_table_new_full ((GHashFunc) g_str_hash,
805+ (GEqualFunc) g_str_equal,
806+ (GDestroyNotify) g_free,
807+ NULL);
808+
809+ matcher->priv->desktop_class_table =
810+ g_hash_table_new_full ((GHashFunc) g_str_hash,
811+ (GEqualFunc) g_str_equal,
812+ (GDestroyNotify) g_free,
813+ (GDestroyNotify) g_free);
814+}
815+
816 static BamfWindow *
817 find_window_in_matcher (BamfMatcher *matcher, BamfLegacyWindow *legacy)
818 {
819@@ -93,6 +123,8 @@
820 GList *l;
821 BamfWindow *found_window = NULL;
822
823+ g_return_val_if_fail (BAMF_IS_APPLICATION (app), NULL);
824+
825 for (l = bamf_view_get_children (BAMF_VIEW (app)); l; l = l->next)
826 {
827 if (!BAMF_IS_WINDOW (l->data))
828@@ -125,6 +157,7 @@
829 BamfMatcher *matcher = bamf_matcher_get_default ();
830 BamfMatcherPrivate *priv = matcher->priv;
831
832+ cleanup_matcher_tables (matcher);
833 bamf_matcher_load_desktop_file (matcher, TEST_BAMF_APP_DESKTOP);
834
835 GList *l = g_hash_table_lookup (priv->desktop_file_table, "testbamfapp");
836@@ -150,6 +183,7 @@
837 screen = bamf_legacy_screen_get_default();
838 matcher = bamf_matcher_get_default ();
839
840+ cleanup_matcher_tables (matcher);
841 export_matcher_on_bus (matcher);
842
843 for (xid = G_MAXUINT; xid > G_MAXUINT-window_count; xid--)
844@@ -194,9 +228,10 @@
845
846 screen = bamf_legacy_screen_get_default();
847 matcher = bamf_matcher_get_default ();
848- char *exec = "test-bamf-app";
849- char *class = "test-bamf-app";
850+ const char *exec = "test-bamf-app";
851+ const char *class = "test-bamf-app";
852
853+ cleanup_matcher_tables (matcher);
854 export_matcher_on_bus (matcher);
855
856 for (xid = G_MAXUINT; xid > G_MAXUINT-window_count; xid--)
857@@ -241,9 +276,10 @@
858
859 screen = bamf_legacy_screen_get_default();
860 matcher = bamf_matcher_get_default ();
861- char *exec = "testbamfapp";
862- char *class = "test_bamf_app";
863+ const char *exec = "testbamfapp";
864+ const char *class = "test_bamf_app";
865
866+ cleanup_matcher_tables (matcher);
867 export_matcher_on_bus (matcher);
868 bamf_matcher_load_desktop_file (matcher, TEST_BAMF_APP_DESKTOP);
869
870@@ -290,9 +326,10 @@
871
872 screen = bamf_legacy_screen_get_default();
873 matcher = bamf_matcher_get_default ();
874- char *exec = "testbamfapp";
875- char *class = "test_bamf_app";
876+ const char *exec = "testbamfapp";
877+ const char *class = "test_bamf_app";
878
879+ cleanup_matcher_tables (matcher);
880 export_matcher_on_bus (matcher);
881 g_assert (!bamf_matcher_get_application_by_desktop_file (matcher, TEST_BAMF_APP_DESKTOP));
882
883@@ -323,3 +360,123 @@
884 g_object_unref (screen);
885 }
886
887+static void
888+test_match_libreoffice_windows (void)
889+{
890+ BamfMatcher *matcher;
891+ BamfWindow *window;
892+ BamfLegacyScreen *screen;
893+ BamfLegacyWindowTest *test_win;
894+ BamfApplication *app;
895+ char *hint;
896+
897+ screen = bamf_legacy_screen_get_default ();
898+ matcher = bamf_matcher_get_default ();
899+ guint xid = g_random_int ();
900+ const char *exec = "soffice.bin";
901+ const char *class_instance = "VCLSalFrame.DocumentWindow";
902+
903+ cleanup_matcher_tables (matcher);
904+ export_matcher_on_bus (matcher);
905+
906+ bamf_matcher_load_desktop_file (matcher, DATA_DIR"/libreoffice-startcenter.desktop");
907+ bamf_matcher_load_desktop_file (matcher, DATA_DIR"/libreoffice-base.desktop");
908+ bamf_matcher_load_desktop_file (matcher, DATA_DIR"/libreoffice-calc.desktop");
909+ bamf_matcher_load_desktop_file (matcher, DATA_DIR"/libreoffice-draw.desktop");
910+ bamf_matcher_load_desktop_file (matcher, DATA_DIR"/libreoffice-impress.desktop");
911+ bamf_matcher_load_desktop_file (matcher, DATA_DIR"/libreoffice-math.desktop");
912+ bamf_matcher_load_desktop_file (matcher, DATA_DIR"/libreoffice-writer.desktop");
913+
914+ test_win = bamf_legacy_window_test_new (xid, "LibreOffice", "libreoffice-startcenter", exec);
915+ bamf_legacy_window_test_set_wmclass (test_win, "libreoffice-startcenter", class_instance);
916+ _bamf_legacy_screen_open_test_window (screen, test_win);
917+
918+ hint = bamf_legacy_window_get_hint (BAMF_LEGACY_WINDOW (test_win), _NET_WM_DESKTOP_FILE);
919+ g_assert_cmpstr (hint, ==, DATA_DIR"/libreoffice-startcenter.desktop");
920+ g_free (hint);
921+ app = bamf_matcher_get_application_by_desktop_file (matcher, DATA_DIR"/libreoffice-startcenter.desktop");
922+ g_assert (find_window_in_app (app, BAMF_LEGACY_WINDOW (test_win)));
923+
924+ bamf_legacy_window_test_set_wmclass (test_win, "libreoffice-base", class_instance);
925+ bamf_legacy_window_test_set_name (test_win, "FooDoc.odb - LibreOffice Base");
926+ g_assert (!bamf_matcher_get_application_by_desktop_file (matcher, DATA_DIR"/libreoffice-startcenter.desktop"));
927+ app = bamf_matcher_get_application_by_desktop_file (matcher, DATA_DIR"/libreoffice-base.desktop");
928+ g_assert (app);
929+ window = BAMF_WINDOW (bamf_view_get_children (BAMF_VIEW (app))->data);
930+ test_win = BAMF_LEGACY_WINDOW_TEST (bamf_window_get_window (window));
931+ hint = bamf_legacy_window_get_hint (BAMF_LEGACY_WINDOW (test_win), _NET_WM_DESKTOP_FILE);
932+ g_assert_cmpstr (hint, ==, DATA_DIR"/libreoffice-base.desktop");
933+ g_free (hint);
934+
935+ bamf_legacy_window_test_set_wmclass (test_win, "libreoffice-calc", class_instance);
936+ bamf_legacy_window_test_set_name (test_win, "FooDoc.ods - LibreOffice Calc");
937+ g_assert (!bamf_matcher_get_application_by_desktop_file (matcher, DATA_DIR"/libreoffice-base.desktop"));
938+ app = bamf_matcher_get_application_by_desktop_file (matcher, DATA_DIR"/libreoffice-calc.desktop");
939+ g_assert (app);
940+ window = BAMF_WINDOW (bamf_view_get_children (BAMF_VIEW (app))->data);
941+ test_win = BAMF_LEGACY_WINDOW_TEST (bamf_window_get_window (window));
942+ hint = bamf_legacy_window_get_hint (BAMF_LEGACY_WINDOW (test_win), _NET_WM_DESKTOP_FILE);
943+ g_assert_cmpstr (hint, ==, DATA_DIR"/libreoffice-calc.desktop");
944+ g_free (hint);
945+
946+ bamf_legacy_window_test_set_wmclass (test_win, "libreoffice-draw", class_instance);
947+ bamf_legacy_window_test_set_name (test_win, "FooDoc.odg - LibreOffice Draw");
948+ g_assert (!bamf_matcher_get_application_by_desktop_file (matcher, DATA_DIR"/libreoffice-calc.desktop"));
949+ app = bamf_matcher_get_application_by_desktop_file (matcher, DATA_DIR"/libreoffice-draw.desktop");
950+ g_assert (app);
951+ window = BAMF_WINDOW (bamf_view_get_children (BAMF_VIEW (app))->data);
952+ test_win = BAMF_LEGACY_WINDOW_TEST (bamf_window_get_window (window));
953+ hint = bamf_legacy_window_get_hint (BAMF_LEGACY_WINDOW (test_win), _NET_WM_DESKTOP_FILE);
954+ g_assert_cmpstr (hint, ==, DATA_DIR"/libreoffice-draw.desktop");
955+ g_free (hint);
956+
957+ bamf_legacy_window_test_set_wmclass (test_win, "libreoffice-impress", class_instance);
958+ bamf_legacy_window_test_set_name (test_win, "FooDoc.odp - LibreOffice Impress");
959+ g_assert (!bamf_matcher_get_application_by_desktop_file (matcher, DATA_DIR"/libreoffice-draw.desktop"));
960+ app = bamf_matcher_get_application_by_desktop_file (matcher, DATA_DIR"/libreoffice-impress.desktop");
961+ g_assert (app);
962+ window = BAMF_WINDOW (bamf_view_get_children (BAMF_VIEW (app))->data);
963+ test_win = BAMF_LEGACY_WINDOW_TEST (bamf_window_get_window (window));
964+ hint = bamf_legacy_window_get_hint (BAMF_LEGACY_WINDOW (test_win), _NET_WM_DESKTOP_FILE);
965+ g_assert_cmpstr (hint, ==, DATA_DIR"/libreoffice-impress.desktop");
966+ g_free (hint);
967+
968+ bamf_legacy_window_test_set_wmclass (test_win, "libreoffice-math", class_instance);
969+ bamf_legacy_window_test_set_name (test_win, "FooDoc.odf - LibreOffice Math");
970+ g_assert (!bamf_matcher_get_application_by_desktop_file (matcher, DATA_DIR"/libreoffice-impress.desktop"));
971+ app = bamf_matcher_get_application_by_desktop_file (matcher, DATA_DIR"/libreoffice-math.desktop");
972+ g_assert (app);
973+ window = BAMF_WINDOW (bamf_view_get_children (BAMF_VIEW (app))->data);
974+ test_win = BAMF_LEGACY_WINDOW_TEST (bamf_window_get_window (window));
975+ hint = bamf_legacy_window_get_hint (BAMF_LEGACY_WINDOW (test_win), _NET_WM_DESKTOP_FILE);
976+ g_assert_cmpstr (hint, ==, DATA_DIR"/libreoffice-math.desktop");
977+ g_free (hint);
978+
979+ bamf_legacy_window_test_set_wmclass (test_win, "libreoffice-writer", class_instance);
980+ bamf_legacy_window_test_set_name (test_win, "FooDoc.odt - LibreOffice Writer");
981+ g_assert (!bamf_matcher_get_application_by_desktop_file (matcher, DATA_DIR"/libreoffice-math.desktop"));
982+ app = bamf_matcher_get_application_by_desktop_file (matcher, DATA_DIR"/libreoffice-writer.desktop");
983+ g_assert (app);
984+ window = BAMF_WINDOW (bamf_view_get_children (BAMF_VIEW (app))->data);
985+ test_win = BAMF_LEGACY_WINDOW_TEST (bamf_window_get_window (window));
986+ hint = bamf_legacy_window_get_hint (BAMF_LEGACY_WINDOW (test_win), _NET_WM_DESKTOP_FILE);
987+ g_assert_cmpstr (hint, ==, DATA_DIR"/libreoffice-writer.desktop");
988+ g_free (hint);
989+
990+ xid = g_random_int ();
991+ test_win = bamf_legacy_window_test_new (xid, "BarDoc.odt - LibreOffice Writer", "libreoffice-writer", exec);
992+ bamf_legacy_window_test_set_wmclass (test_win, "libreoffice-writer", class_instance);
993+ _bamf_legacy_screen_open_test_window (screen, test_win);
994+
995+ g_assert_cmpuint (g_list_length (bamf_view_get_children (BAMF_VIEW (app))), ==, 2);
996+
997+ xid = g_random_int ();
998+ test_win = bamf_legacy_window_test_new (xid, "BarDoc.ods - LibreOffice Calc", "libreoffice-calc", exec);
999+ bamf_legacy_window_test_set_wmclass (test_win, "libreoffice-calc", class_instance);
1000+ _bamf_legacy_screen_open_test_window (screen, test_win);
1001+ g_assert (bamf_matcher_get_application_by_desktop_file (matcher, DATA_DIR"/libreoffice-calc.desktop"));
1002+
1003+ g_object_unref (matcher);
1004+ g_object_unref (screen);
1005+}
1006+
1007
1008=== modified file 'tests/bamfdaemon/test-window.c'
1009--- tests/bamfdaemon/test-window.c 2012-02-10 18:30:25 +0000
1010+++ tests/bamfdaemon/test-window.c 2012-10-10 17:33:41 +0000
1011@@ -25,6 +25,7 @@
1012
1013 static void test_allocation (void);
1014 static void test_xid (void);
1015+static void test_hints (void);
1016 static void test_active (void);
1017 static void test_urgent (void);
1018 static void test_user_visible (void);
1019@@ -43,6 +44,7 @@
1020
1021 g_test_add_func (DOMAIN"/Allocation", test_allocation);
1022 g_test_add_func (DOMAIN"/Xid", test_xid);
1023+ g_test_add_func (DOMAIN"/Hints", test_hints);
1024 g_test_add_func (DOMAIN"/Events/Active", test_active);
1025 g_test_add_func (DOMAIN"/Events/Urgent", test_urgent);
1026 g_test_add_func (DOMAIN"/Events/UserVisible", test_user_visible);
1027@@ -71,6 +73,24 @@
1028 }
1029
1030 void
1031+test_hints (void)
1032+{
1033+ BamfWindow *window;
1034+ BamfLegacyWindowTest *test;
1035+
1036+ test = bamf_legacy_window_test_new (20,"Window X", "class", "exec");
1037+ window = bamf_window_new (BAMF_LEGACY_WINDOW (test));
1038+
1039+ bamf_legacy_window_set_hint (BAMF_LEGACY_WINDOW (test), "HINT_NAME", "HINT_VALUE");
1040+
1041+ g_assert_cmpstr (bamf_window_get_string_hint (window, "HINT_NAME"), ==, "HINT_VALUE");
1042+ g_assert_cmpstr (bamf_window_get_string_hint (window, "INVALID_HINT_NAME"), ==, NULL);
1043+
1044+ g_object_unref (window);
1045+ g_object_unref (test);
1046+}
1047+
1048+void
1049 test_xid (void)
1050 {
1051 BamfWindow *window;

Subscribers

People subscribed via source and target branches