Merge lp:~3v1n0/bamf/qmlapp-matching-0.4 into lp:bamf/0.4

Proposed by Marco Trevisan (Treviño)
Status: Merged
Approved by: Christopher Townsend
Approved revision: 543
Merged at revision: 543
Proposed branch: lp:~3v1n0/bamf/qmlapp-matching-0.4
Merge into: lp:bamf/0.4
Diff against target: 937 lines (+508/-152)
9 files modified
src/bamf-application.c (+1/-4)
src/bamf-legacy-window-test.c (+2/-2)
src/bamf-legacy-window.c (+15/-6)
src/bamf-legacy-window.h (+2/-2)
src/bamf-matcher-private.h (+2/-1)
src/bamf-matcher.c (+118/-64)
tests/bamfdaemon/test-application.c (+101/-35)
tests/bamfdaemon/test-matcher.c (+259/-38)
tests/data/bamf-qml-app.desktop (+8/-0)
To merge this branch: bzr merge lp:~3v1n0/bamf/qmlapp-matching-0.4
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Approve
Christopher Townsend Approve
Review via email: mp+176928@code.launchpad.net

Commit message

BamfMatcher: correctly match QML applications launched with qmlscene or qmlviewer

This also includes adding support to the "--desktop_file_hint" exec parameter to override
matching and caching the window exec string in BamfLegacyWindow.

To post a comment you must log in.
Revision history for this message
Christopher Townsend (townsend) wrote :

Looks like a straight forward backport. +1

review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/bamf-application.c'
--- src/bamf-application.c 2013-05-24 17:00:19 +0000
+++ src/bamf-application.c 2013-07-25 12:39:27 +0000
@@ -300,7 +300,7 @@
300 break;300 break;
301301
302 g_free (icon);302 g_free (icon);
303 icon = bamf_legacy_window_get_exec_string (bamf_window_get_window (window));303 icon = g_strdup (bamf_legacy_window_get_exec_string (bamf_window_get_window (window)));
304304
305 if (icon_name_is_valid (icon))305 if (icon_name_is_valid (icon))
306 break;306 break;
@@ -444,9 +444,6 @@
444 const char *window_class = bamf_legacy_window_get_class_name (window);444 const char *window_class = bamf_legacy_window_get_class_name (window);
445 const char *instance_name = bamf_legacy_window_get_class_instance_name (window);445 const char *instance_name = bamf_legacy_window_get_class_instance_name (window);
446446
447 if (!window_class && !instance_name)
448 return FALSE;
449
450 children = bamf_view_get_children (BAMF_VIEW (self));447 children = bamf_view_get_children (BAMF_VIEW (self));
451 for (l = children; l; l = l->next)448 for (l = children; l; l = l->next)
452 {449 {
453450
=== modified file 'src/bamf-legacy-window-test.c'
--- src/bamf-legacy-window-test.c 2013-04-18 13:57:15 +0000
+++ src/bamf-legacy-window-test.c 2013-07-25 12:39:27 +0000
@@ -221,14 +221,14 @@
221 return self->wm_class_instance;221 return self->wm_class_instance;
222}222}
223223
224char *224const char *
225bamf_legacy_window_test_get_exec_string (BamfLegacyWindow *legacy_window)225bamf_legacy_window_test_get_exec_string (BamfLegacyWindow *legacy_window)
226{226{
227 BamfLegacyWindowTest *self;227 BamfLegacyWindowTest *self;
228228
229 self = BAMF_LEGACY_WINDOW_TEST (legacy_window);229 self = BAMF_LEGACY_WINDOW_TEST (legacy_window);
230230
231 return g_strdup (self->exec);231 return self->exec;
232}232}
233233
234char *234char *
235235
=== modified file 'src/bamf-legacy-window.c'
--- src/bamf-legacy-window.c 2013-04-18 14:20:02 +0000
+++ src/bamf-legacy-window.c 2013-07-25 12:39:27 +0000
@@ -51,7 +51,8 @@
51struct _BamfLegacyWindowPrivate51struct _BamfLegacyWindowPrivate
52{52{
53 WnckWindow * legacy_window;53 WnckWindow * legacy_window;
54 char * mini_icon_path;54 gchar * mini_icon_path;
55 gchar * exec_string;
55 gboolean is_closed;56 gboolean is_closed;
56};57};
5758
@@ -218,10 +219,9 @@
218 return result;219 return result;
219}220}
220221
221char *222const char *
222bamf_legacy_window_get_exec_string (BamfLegacyWindow *self)223bamf_legacy_window_get_exec_string (BamfLegacyWindow *self)
223{224{
224 gchar *result = NULL;
225 gint pid = 0, i = 0;225 gint pid = 0, i = 0;
226 gchar **argv = NULL;226 gchar **argv = NULL;
227 GString *exec = NULL;227 GString *exec = NULL;
@@ -232,6 +232,9 @@
232 if (BAMF_LEGACY_WINDOW_GET_CLASS (self)->get_exec_string)232 if (BAMF_LEGACY_WINDOW_GET_CLASS (self)->get_exec_string)
233 return BAMF_LEGACY_WINDOW_GET_CLASS (self)->get_exec_string (self);233 return BAMF_LEGACY_WINDOW_GET_CLASS (self)->get_exec_string (self);
234234
235 if (self->priv->exec_string)
236 return self->priv->exec_string;
237
235 pid = bamf_legacy_window_get_pid (self);238 pid = bamf_legacy_window_get_pid (self);
236239
237 if (pid == 0)240 if (pid == 0)
@@ -251,9 +254,10 @@
251254
252 g_free (argv);255 g_free (argv);
253256
254 result = g_strdup (exec->str);257 self->priv->exec_string = g_strdup (exec->str);
255 g_string_free (exec, TRUE);258 g_string_free (exec, TRUE);
256 return result;259
260 return self->priv->exec_string;
257}261}
258262
259const char *263const char *
@@ -561,7 +565,6 @@
561565
562 self = BAMF_LEGACY_WINDOW (object);566 self = BAMF_LEGACY_WINDOW (object);
563567
564
565 if (self->priv->mini_icon_path)568 if (self->priv->mini_icon_path)
566 {569 {
567 file = g_file_new_for_path (self->priv->mini_icon_path);570 file = g_file_new_for_path (self->priv->mini_icon_path);
@@ -572,6 +575,12 @@
572 self->priv->mini_icon_path = NULL;575 self->priv->mini_icon_path = NULL;
573 }576 }
574577
578 if (self->priv->exec_string)
579 {
580 g_free (self->priv->exec_string);
581 self->priv->exec_string = NULL;
582 }
583
575 g_signal_handlers_disconnect_by_data (wnck_screen_get_default (), self);584 g_signal_handlers_disconnect_by_data (wnck_screen_get_default (), self);
576585
577 if (self->priv->legacy_window)586 if (self->priv->legacy_window)
578587
=== modified file 'src/bamf-legacy-window.h'
--- src/bamf-legacy-window.h 2013-04-17 00:48:32 +0000
+++ src/bamf-legacy-window.h 2013-07-25 12:39:27 +0000
@@ -77,7 +77,7 @@
77 const char * (*get_role) (BamfLegacyWindow *legacy_window);77 const char * (*get_role) (BamfLegacyWindow *legacy_window);
78 const char * (*get_class_name) (BamfLegacyWindow *legacy_window);78 const char * (*get_class_name) (BamfLegacyWindow *legacy_window);
79 const char * (*get_class_instance_name) (BamfLegacyWindow *legacy_window);79 const char * (*get_class_instance_name) (BamfLegacyWindow *legacy_window);
80 char * (*get_exec_string) (BamfLegacyWindow *legacy_window);80 const char * (*get_exec_string) (BamfLegacyWindow *legacy_window);
81 char * (*get_process_name) (BamfLegacyWindow *legacy_window);81 char * (*get_process_name) (BamfLegacyWindow *legacy_window);
82 char * (*get_app_id) (BamfLegacyWindow *legacy_window);82 char * (*get_app_id) (BamfLegacyWindow *legacy_window);
83 char * (*get_unique_bus_name) (BamfLegacyWindow *legacy_window);83 char * (*get_unique_bus_name) (BamfLegacyWindow *legacy_window);
@@ -149,7 +149,7 @@
149149
150const char * bamf_legacy_window_save_mini_icon (BamfLegacyWindow *self);150const char * bamf_legacy_window_save_mini_icon (BamfLegacyWindow *self);
151151
152char * bamf_legacy_window_get_exec_string (BamfLegacyWindow *self);152const char * bamf_legacy_window_get_exec_string (BamfLegacyWindow *self);
153153
154char * bamf_legacy_window_get_process_name (BamfLegacyWindow *self);154char * bamf_legacy_window_get_process_name (BamfLegacyWindow *self);
155155
156156
=== modified file 'src/bamf-matcher-private.h'
--- src/bamf-matcher-private.h 2013-03-28 17:22:08 +0000
+++ src/bamf-matcher-private.h 2013-07-25 12:39:27 +0000
@@ -51,7 +51,8 @@
5151
52BamfApplication * bamf_matcher_get_application_by_desktop_file (BamfMatcher *self, const char *desktop_file);52BamfApplication * bamf_matcher_get_application_by_desktop_file (BamfMatcher *self, const char *desktop_file);
53BamfApplication * bamf_matcher_get_application_by_xid (BamfMatcher *self, guint xid);53BamfApplication * bamf_matcher_get_application_by_xid (BamfMatcher *self, guint xid);
54gboolean bamf_matcher_is_valid_process_prefix (BamfMatcher *self, const char *exec);
54char * bamf_matcher_get_trimmed_exec (BamfMatcher *self, const char *exec);55char * bamf_matcher_get_trimmed_exec (BamfMatcher *self, const char *exec);
55gboolean bamf_matcher_is_valid_process_prefix (BamfMatcher *self, const char *exec);56char * get_exec_overridden_desktop_file (const char *exec);
5657
57#endif58#endif
5859
=== modified file 'src/bamf-matcher.c'
--- src/bamf-matcher.c 2013-04-18 14:20:02 +0000
+++ src/bamf-matcher.c 2013-07-25 12:39:27 +0000
@@ -57,13 +57,16 @@
57// Prefixes to be ignored in exec strings57// Prefixes to be ignored in exec strings
58const gchar* EXEC_BAD_PREFIXES[] =58const gchar* EXEC_BAD_PREFIXES[] =
59{59{
60 "^gksu(do)?$", "^sudo$", "^su-to-root$", "^amdxdg-su$", "^java(ws)?$",60 "^gksu(do)?$", "^sudo$", "^su-to-root$", "^amdxdg-su$", "^java(ws)?$", "^cli$",
61 "^mono$", "^ruby$", "^padsp$", "^aoss$", "^python(\\d.\\d)?$", "^(ba)?sh$",61 "^mono$", "^ruby$", "^padsp$", "^aoss$", "^python(\\d.\\d)?$", "^(ba)?sh$",
62 "^perl$", "^env$", "^xdg-open$",62 "^perl$", "^env$", "^xdg-open$", "^qmlscene$", "^qmlviewer$",
63 /* javaws strings: */ "^net\\.sourceforge\\.jnlp\\.runtime\\.Boot$", "^rt\\.jar$",63 /* javaws strings: */ "^net\\.sourceforge\\.jnlp\\.runtime\\.Boot$", "^rt\\.jar$",
64 "^com\\.sun\\.javaws\\.Main$", "^deploy\\.jar$"64 "^com\\.sun\\.javaws\\.Main$", "^deploy\\.jar$"
65};65};
6666
67// Sufixes to be ignored in exec strings
68const gchar* EXEC_BAD_SUFIXES = "(\\.bin|\\.py|\\.pl|\\.qml)$";
69
67// Prefixes that must be considered starting point of exec strings70// Prefixes that must be considered starting point of exec strings
68const gchar* EXEC_GOOD_PREFIXES[] =71const gchar* EXEC_GOOD_PREFIXES[] =
69{72{
@@ -71,6 +74,8 @@
71 "^sol$"74 "^sol$"
72};75};
7376
77const gchar * EXEC_DESKTOP_FILE_OVERRIDE = "--desktop_file_hint";
78
74static void79static void
75on_view_active_changed (BamfView *view, gboolean active, BamfMatcher *matcher)80on_view_active_changed (BamfView *view, gboolean active, BamfMatcher *matcher)
76{81{
@@ -441,9 +446,16 @@
441 for (i = 0; i < parts_size; ++i)446 for (i = 0; i < parts_size; ++i)
442 {447 {
443 part = parts[i];448 part = parts[i];
444 if (*part == '%' || g_utf8_strrchr (part, -1, '='))449 if (*part == '%' || *part == '$' || g_utf8_strrchr (part, -1, '='))
445 continue;450 continue;
446451
452 if (i+1 < parts_size && g_strcmp0 (parts[i], EXEC_DESKTOP_FILE_OVERRIDE) == 0)
453 {
454 /* Skip if the .desktop file is overridden using the exec parameter */
455 ++i;
456 continue;
457 }
458
447 if (*part != '-' || good_prefix)459 if (*part != '-' || good_prefix)
448 {460 {
449 if (!result)461 if (!result)
@@ -519,7 +531,7 @@
519 {531 {
520 tmp = result;532 tmp = result;
521533
522 regex = g_regex_new ("(\\.bin|\\.py|\\.pl)$", 0, 0, NULL);534 regex = g_regex_new (EXEC_BAD_SUFIXES, 0, 0, NULL);
523 result = g_regex_replace_literal (regex, result, -1, 0, "", 0, NULL);535 result = g_regex_replace_literal (regex, result, -1, 0, "", 0, NULL);
524536
525 g_free (tmp);537 g_free (tmp);
@@ -531,6 +543,37 @@
531 return result;543 return result;
532}544}
533545
546char *
547get_exec_overridden_desktop_file (const char *exec_string)
548{
549 gchar *result = NULL;
550 gchar **parts;
551 gint i, parts_size;
552
553 if (!exec_string || exec_string[0] == '\0')
554 return result;
555
556 if (!g_shell_parse_argv (exec_string, &parts_size, &parts, NULL))
557 return result;
558
559 for (i = 0; i < parts_size; ++i)
560 {
561 if (i+1 < parts_size && g_strcmp0 (parts[i], EXEC_DESKTOP_FILE_OVERRIDE) == 0)
562 {
563 if (g_str_has_suffix (parts[i+1], ".desktop") &&
564 g_file_test (parts[i+1], G_FILE_TEST_EXISTS|G_FILE_TEST_IS_REGULAR))
565 {
566 result = g_strdup (parts[i+1]);
567 break;
568 }
569 }
570 }
571
572 g_strfreev (parts);
573
574 return result;
575}
576
534static GList *577static GList *
535pid_parent_tree (BamfMatcher *self, guint pid)578pid_parent_tree (BamfMatcher *self, guint pid)
536{579{
@@ -1408,7 +1451,7 @@
1408{1451{
1409 BamfMatcherPrivate *priv;1452 BamfMatcherPrivate *priv;
1410 GList *result = NULL, *table_list, *l;1453 GList *result = NULL, *table_list, *l;
1411 char *exec_string;1454 const char *exec_string;
1412 char *trimmed;1455 char *trimmed;
14131456
1414 g_return_val_if_fail (BAMF_IS_MATCHER (self), NULL);1457 g_return_val_if_fail (BAMF_IS_MATCHER (self), NULL);
@@ -1434,7 +1477,6 @@
1434 }1477 }
1435 g_free (trimmed);1478 g_free (trimmed);
1436 }1479 }
1437 g_free (exec_string);
1438 }1480 }
14391481
1440 if (result)1482 if (result)
@@ -1596,18 +1638,18 @@
1596 filter_by_wmclass = bamf_matcher_has_instance_class_desktop_file (self, target_class);1638 filter_by_wmclass = bamf_matcher_has_instance_class_desktop_file (self, target_class);
15971639
1598 if (!filter_by_wmclass)1640 if (!filter_by_wmclass)
1599 {1641 {
1600 if (is_web_app_window (window))1642 if (is_web_app_window (window))
1601 {1643 {
1602 // This ensures that a new application is created even for unknown webapps1644 // This ensures that a new application is created even for unknown webapps
1603 filter_by_wmclass = TRUE;1645 filter_by_wmclass = TRUE;
1604 }1646 }
1605 else1647 else
1606 {1648 {
1607 target_class = class_name;1649 target_class = class_name;
1608 filter_by_wmclass = bamf_matcher_has_instance_class_desktop_file (self, target_class);1650 filter_by_wmclass = bamf_matcher_has_instance_class_desktop_file (self, target_class);
1609 }1651 }
1610 }1652 }
16111653
1612 if (desktop_file)1654 if (desktop_file)
1613 {1655 {
@@ -1622,6 +1664,16 @@
1622 g_free (desktop_file);1664 g_free (desktop_file);
1623 }1665 }
1624 }1666 }
1667 else
1668 {
1669 const char *exec_string = bamf_legacy_window_get_exec_string (window);
1670 desktop_file = get_exec_overridden_desktop_file (exec_string);
1671
1672 if (desktop_file)
1673 {
1674 desktop_files = g_list_prepend (desktop_files, desktop_file);
1675 }
1676 }
16251677
1626 desktop_file = NULL;1678 desktop_file = NULL;
16271679
@@ -1839,60 +1891,62 @@
18391891
1840 const gchar *app_desktop_class;1892 const gchar *app_desktop_class;
18411893
1842 for (a = self->priv->views; a; a = a->next)1894 const char *win_instance_name = bamf_legacy_window_get_class_instance_name (window);
1895 const char *exec_string = bamf_legacy_window_get_exec_string (window);
1896 char *trimmed_exec = bamf_matcher_get_trimmed_exec (self, exec_string);
1897
1898 if (trimmed_exec || win_class_name || win_instance_name)
1843 {1899 {
1844 view = a->data;1900 for (a = self->priv->views; a; a = a->next)
1845
1846 if (!BAMF_IS_APPLICATION (view))
1847 continue;
1848
1849 app = BAMF_APPLICATION (view);
1850
1851 if (bamf_application_contains_similar_to_window (app, bamf_window))
1852 {1901 {
1853 char *exec_string = bamf_legacy_window_get_exec_string (window);1902 view = a->data;
1854 char *trimmed_exec = bamf_matcher_get_trimmed_exec (self, exec_string);1903
1855 g_free (exec_string);1904 if (!BAMF_IS_APPLICATION (view))
18561905 continue;
1857 GList *ll;1906
1858 gboolean found_exec = FALSE;1907 app = BAMF_APPLICATION (view);
1859 for (ll = bamf_view_get_children (BAMF_VIEW (app)); ll && !found_exec; ll = ll->next)1908
1909 if (bamf_application_contains_similar_to_window (app, bamf_window))
1860 {1910 {
1861 if (!BAMF_IS_WINDOW (ll->data))1911 GList *ll;
1912 gboolean found_exec = FALSE;
1913 for (ll = bamf_view_get_children (BAMF_VIEW (app)); ll && !found_exec; ll = ll->next)
1914 {
1915 if (!BAMF_IS_WINDOW (ll->data))
1916 continue;
1917
1918 BamfLegacyWindow *w = bamf_window_get_window (BAMF_WINDOW (ll->data));
1919 const char *wexec = bamf_legacy_window_get_exec_string (w);
1920 char *wtrimmed = bamf_matcher_get_trimmed_exec (self, wexec);
1921
1922 if (g_strcmp0 (trimmed_exec, wtrimmed) == 0)
1923 {
1924 best = BAMF_APPLICATION (view);
1925 found_exec = TRUE;
1926 }
1927
1928 g_free (wtrimmed);
1929 }
1930
1931 if (!found_exec)
1862 continue;1932 continue;
18631933
1864 BamfLegacyWindow *w = bamf_window_get_window (BAMF_WINDOW (ll->data));1934 app_desktop_class = bamf_application_get_wmclass (app);
1865 char *wexec = bamf_legacy_window_get_exec_string (w);1935
1866 char *wtrimmed = bamf_matcher_get_trimmed_exec (self, wexec);1936 if (target_class && g_strcmp0 (target_class, app_desktop_class) == 0)
1867 g_free (wexec);1937 {
18681938 best = app;
1869 if (g_strcmp0 (trimmed_exec, wtrimmed) == 0)1939 break;
1870 {1940 }
1871 best = BAMF_APPLICATION (view);1941 else if (!best)
1872 found_exec = TRUE;1942 {
1873 }1943 best = app;
18741944 }
1875 g_free (wtrimmed);
1876 }
1877
1878 g_free (trimmed_exec);
1879
1880 if (!found_exec)
1881 continue;
1882
1883 app_desktop_class = bamf_application_get_wmclass (app);
1884
1885 if (target_class && g_strcmp0 (target_class, app_desktop_class) == 0)
1886 {
1887 best = app;
1888 break;
1889 }
1890 else if (!best)
1891 {
1892 best = app;
1893 }1945 }
1894 }1946 }
1895 }1947 }
1948
1949 g_free (trimmed_exec);
1896 }1950 }
18971951
1898 if (!best)1952 if (!best)
18991953
=== modified file 'tests/bamfdaemon/test-application.c'
--- tests/bamfdaemon/test-application.c 2013-05-30 22:06:14 +0000
+++ tests/bamfdaemon/test-application.c 2013-07-25 12:39:27 +0000
@@ -28,46 +28,11 @@
2828
29#define DESKTOP_FILE "/usr/share/applications/gnome-terminal.desktop"29#define DESKTOP_FILE "/usr/share/applications/gnome-terminal.desktop"
3030
31static void test_allocation (void);
32static void test_desktop_file (void);
33static void test_desktop_no_icon (void);
34static void test_get_mime_types (void);
35static void test_get_mime_types_none (void);
36static void test_urgent (void);
37static void test_active (void);
38static void test_get_xids (void);
39static void test_manages_xid (void);
40static void test_user_visible (void);
41static void test_urgent (void);
42static void test_window_added (void);
43static void test_window_removed (void);
44
45static gboolean signal_seen = FALSE;31static gboolean signal_seen = FALSE;
46static gboolean signal_result = FALSE;32static gboolean signal_result = FALSE;
47static char * signal_window = NULL;33static char * signal_window = NULL;
48static GDBusConnection * gdbus_connection = NULL;34static GDBusConnection * gdbus_connection = NULL;
4935
50void
51test_application_create_suite (GDBusConnection *connection)
52{
53#define DOMAIN "/Application"
54
55 gdbus_connection = connection;
56
57 g_test_add_func (DOMAIN"/Allocation", test_allocation);
58 g_test_add_func (DOMAIN"/DesktopFile", test_desktop_file);
59 g_test_add_func (DOMAIN"/DesktopFile/NoIcon", test_desktop_no_icon);
60 g_test_add_func (DOMAIN"/DesktopFile/MimeTypes/Valid", test_get_mime_types);
61 g_test_add_func (DOMAIN"/DesktopFile/MimeTypes/None", test_get_mime_types_none);
62 g_test_add_func (DOMAIN"/ManagesXid", test_manages_xid);
63 g_test_add_func (DOMAIN"/Xids", test_get_xids);
64 g_test_add_func (DOMAIN"/Events/Active", test_active);
65 g_test_add_func (DOMAIN"/Events/Urgent", test_urgent);
66 g_test_add_func (DOMAIN"/Events/UserVisible", test_user_visible);
67 g_test_add_func (DOMAIN"/Events/WindowAdded", test_window_added);
68 g_test_add_func (DOMAIN"/Events/WindowRemoved", test_window_removed);
69}
70
71static void36static void
72test_allocation (void)37test_allocation (void)
73{38{
@@ -536,3 +501,104 @@
536 g_object_unref (window);501 g_object_unref (window);
537 g_object_unref (test);502 g_object_unref (test);
538}503}
504
505static void
506test_contain_similar_to_window (void)
507{
508 BamfApplication *application;
509 BamfLegacyWindowTest *lwin;
510 BamfWindow *win, *win1, *win2, *win3;
511
512 application = bamf_application_new ();
513 lwin = bamf_legacy_window_test_new (20, "window", NULL, "binary");
514 bamf_legacy_window_test_set_wmclass (lwin, "ClassName", "ClassInstance");
515 win = bamf_window_new (BAMF_LEGACY_WINDOW (lwin));
516 bamf_view_add_child (BAMF_VIEW (application), BAMF_VIEW (win));
517 g_object_unref (lwin);
518
519 lwin = bamf_legacy_window_test_new (30, "window1", NULL, "binary1");
520 bamf_legacy_window_test_set_wmclass (lwin, "ClassName", "ClassInstance");
521 win1 = bamf_window_new (BAMF_LEGACY_WINDOW (lwin));
522 g_object_unref (lwin);
523 g_assert (bamf_application_contains_similar_to_window (application, win1));
524
525 lwin = bamf_legacy_window_test_new (40, "window2", NULL, "binary2");
526 bamf_legacy_window_test_set_wmclass (lwin, "ClassName", "ClassInstance2");
527 win2 = bamf_window_new (BAMF_LEGACY_WINDOW (lwin));
528 g_object_unref (lwin);
529 g_assert (!bamf_application_contains_similar_to_window (application, win2));
530
531 lwin = bamf_legacy_window_test_new (50, "window3", NULL, "binary3");
532 bamf_legacy_window_test_set_wmclass (lwin, "ClassName3", "ClassInstance");
533 win3 = bamf_window_new (BAMF_LEGACY_WINDOW (lwin));
534 g_object_unref (lwin);
535 g_assert (!bamf_application_contains_similar_to_window (application, win3));
536
537 g_object_unref (win);
538 g_object_unref (win1);
539 g_object_unref (win2);
540 g_object_unref (win3);
541 g_object_unref (application);
542}
543
544static void
545test_contain_similar_to_window_null (void)
546{
547 BamfApplication *application;
548 BamfLegacyWindowTest *lwin;
549 BamfWindow *win, *win1, *win2, *win3;
550
551 application = bamf_application_new ();
552 lwin = bamf_legacy_window_test_new (20, "window", NULL, "binary");
553 bamf_legacy_window_test_set_wmclass (lwin, NULL, NULL);
554 win = bamf_window_new (BAMF_LEGACY_WINDOW (lwin));
555 bamf_view_add_child (BAMF_VIEW (application), BAMF_VIEW (win));
556 g_object_unref (lwin);
557
558 lwin = bamf_legacy_window_test_new (30, "window1", NULL, "binary1");
559 bamf_legacy_window_test_set_wmclass (lwin, NULL, NULL);
560 win1 = bamf_window_new (BAMF_LEGACY_WINDOW (lwin));
561 g_object_unref (lwin);
562 g_assert (bamf_application_contains_similar_to_window (application, win1));
563
564 lwin = bamf_legacy_window_test_new (40, "window2", NULL, "binary2");
565 bamf_legacy_window_test_set_wmclass (lwin, "ClassName", NULL);
566 win2 = bamf_window_new (BAMF_LEGACY_WINDOW (lwin));
567 g_object_unref (lwin);
568 g_assert (!bamf_application_contains_similar_to_window (application, win2));
569
570 lwin = bamf_legacy_window_test_new (50, "window3", NULL, "binary3");
571 bamf_legacy_window_test_set_wmclass (lwin, NULL, "ClassInstance");
572 win3 = bamf_window_new (BAMF_LEGACY_WINDOW (lwin));
573 g_object_unref (lwin);
574 g_assert (!bamf_application_contains_similar_to_window (application, win3));
575
576 g_object_unref (win);
577 g_object_unref (win1);
578 g_object_unref (win2);
579 g_object_unref (win3);
580 g_object_unref (application);
581}
582
583void
584test_application_create_suite (GDBusConnection *connection)
585{
586#define DOMAIN "/Application"
587
588 gdbus_connection = connection;
589
590 g_test_add_func (DOMAIN"/Allocation", test_allocation);
591 g_test_add_func (DOMAIN"/ContainsSimilarToWindow", test_contain_similar_to_window);
592 g_test_add_func (DOMAIN"/ContainsSimilarToWindow/Null", test_contain_similar_to_window_null);
593 g_test_add_func (DOMAIN"/DesktopFile", test_desktop_file);
594 g_test_add_func (DOMAIN"/DesktopFile/NoIcon", test_desktop_no_icon);
595 g_test_add_func (DOMAIN"/DesktopFile/MimeTypes/Valid", test_get_mime_types);
596 g_test_add_func (DOMAIN"/DesktopFile/MimeTypes/None", test_get_mime_types_none);
597 g_test_add_func (DOMAIN"/ManagesXid", test_manages_xid);
598 g_test_add_func (DOMAIN"/Xids", test_get_xids);
599 g_test_add_func (DOMAIN"/Events/Active", test_active);
600 g_test_add_func (DOMAIN"/Events/Urgent", test_urgent);
601 g_test_add_func (DOMAIN"/Events/UserVisible", test_user_visible);
602 g_test_add_func (DOMAIN"/Events/WindowAdded", test_window_added);
603 g_test_add_func (DOMAIN"/Events/WindowRemoved", test_window_removed);
604}
539605
=== modified file 'tests/bamfdaemon/test-matcher.c'
--- tests/bamfdaemon/test-matcher.c 2013-05-24 17:11:00 +0000
+++ tests/bamfdaemon/test-matcher.c 2013-07-25 12:39:27 +0000
@@ -26,50 +26,12 @@
26#include "bamf-legacy-window.h"26#include "bamf-legacy-window.h"
27#include "bamf-legacy-window-test.h"27#include "bamf-legacy-window-test.h"
2828
29static void test_allocation (void);
30static void test_load_desktop_file (void);
31static void test_load_desktop_file_no_display_has_lower_prio_same_id (void);
32static void test_load_desktop_file_no_display_has_lower_prio_different_id (void);
33static void test_open_windows (void);
34static void test_match_desktopless_application (void);
35static void test_match_desktop_application (void);
36static void test_match_libreoffice_windows (void);
37static void test_match_gnome_control_center_panels (void);
38static void test_match_javaws_windows (void);
39static void test_match_javaws_windows_hint_ignored (void);
40static void test_match_javaws_windows_no_desktop_match (void);
41static void test_new_desktop_matches_unmatched_windows (void);
42static void test_match_transient_windows (void);
43static void test_trim_exec_string (void);
44
45static GDBusConnection *gdbus_connection = NULL;29static GDBusConnection *gdbus_connection = NULL;
4630
47#define DOMAIN "/Matcher"31#define DOMAIN "/Matcher"
48#define DATA_DIR TESTDIR "/data"32#define DATA_DIR TESTDIR "/data"
49#define TEST_BAMF_APP_DESKTOP DATA_DIR "/test-bamf-app.desktop"33#define TEST_BAMF_APP_DESKTOP DATA_DIR "/test-bamf-app.desktop"
5034
51void
52test_matcher_create_suite (GDBusConnection *connection)
53{
54 gdbus_connection = connection;
55
56 g_test_add_func (DOMAIN"/Allocation", test_allocation);
57 g_test_add_func (DOMAIN"/LoadDesktopFile", test_load_desktop_file);
58 g_test_add_func (DOMAIN"/LoadDesktopFile/NoDisplay/SameID", test_load_desktop_file_no_display_has_lower_prio_same_id);
59 g_test_add_func (DOMAIN"/LoadDesktopFile/NoDisplay/DifferentID", test_load_desktop_file_no_display_has_lower_prio_different_id);
60 g_test_add_func (DOMAIN"/OpenWindows", test_open_windows);
61 g_test_add_func (DOMAIN"/Matching/Application/DesktopLess", test_match_desktopless_application);
62 g_test_add_func (DOMAIN"/Matching/Application/Desktop", test_match_desktop_application);
63 g_test_add_func (DOMAIN"/Matching/Application/LibreOffice", test_match_libreoffice_windows);
64 g_test_add_func (DOMAIN"/Matching/Application/GnomeControlCenter", test_match_gnome_control_center_panels);
65 g_test_add_func (DOMAIN"/Matching/Application/JavaWebStart", test_match_javaws_windows);
66 g_test_add_func (DOMAIN"/Matching/Application/JavaWebStart/HintIngored", test_match_javaws_windows_hint_ignored);
67 g_test_add_func (DOMAIN"/Matching/Application/JavaWebStart/NoDesktopMatch", test_match_javaws_windows_no_desktop_match);
68 g_test_add_func (DOMAIN"/Matching/Windows/UnmatchedOnNewDesktop", test_new_desktop_matches_unmatched_windows);
69 g_test_add_func (DOMAIN"/Matching/Windows/Transient", test_match_transient_windows);
70 g_test_add_func (DOMAIN"/ExecStringTrimming", test_trim_exec_string);
71}
72
73static void35static void
74export_matcher_on_bus (BamfMatcher *matcher)36export_matcher_on_bus (BamfMatcher *matcher)
75{37{
@@ -771,6 +733,191 @@
771}733}
772734
773static void735static void
736test_match_qml_app_no_desktop (void)
737{
738 BamfMatcher *matcher;
739 BamfLegacyScreen *screen;
740 BamfLegacyWindowTest *test_win;
741 BamfApplication *app1, *app2, *app3;
742
743 screen = bamf_legacy_screen_get_default ();
744 matcher = bamf_matcher_get_default ();
745 cleanup_matcher_tables (matcher);
746 export_matcher_on_bus (matcher);
747
748 guint xid = g_random_int ();
749 test_win = bamf_legacy_window_test_new (xid, "QmlApp1", NULL, "qmlscene qmlapp1.qml");
750 bamf_legacy_window_test_set_wmclass (test_win, NULL, NULL);
751 _bamf_legacy_screen_open_test_window (screen, test_win);
752
753 app1 = bamf_matcher_get_application_by_xid (matcher, xid);
754 g_assert (BAMF_IS_APPLICATION (app1));
755
756 xid = g_random_int ();
757 test_win = bamf_legacy_window_test_new (xid, "QmlApp2", NULL, "qmlscene qmlapp2.qml");
758 bamf_legacy_window_test_set_wmclass (test_win, NULL, NULL);
759 _bamf_legacy_screen_open_test_window (screen, test_win);
760
761 app2 = bamf_matcher_get_application_by_xid (matcher, xid);
762 g_assert (BAMF_IS_APPLICATION (app2));
763 g_assert (app1 != app2);
764
765 xid = g_random_int ();
766 test_win = bamf_legacy_window_test_new (xid, "QmlApp2", NULL, "qmlscene qmlapp2.qml");
767 bamf_legacy_window_test_set_wmclass (test_win, NULL, NULL);
768 _bamf_legacy_screen_open_test_window (screen, test_win);
769
770 app3 = bamf_matcher_get_application_by_xid (matcher, xid);
771 g_assert (BAMF_IS_APPLICATION (app3));
772 g_assert (app2 == app3);
773
774 g_object_unref (matcher);
775 g_object_unref (screen);
776}
777
778static void
779test_match_qml_app_desktop (void)
780{
781 BamfMatcher *matcher;
782 BamfLegacyScreen *screen;
783 BamfLegacyWindowTest *test_win;
784 BamfApplication *app1, *app2, *app3;
785
786 screen = bamf_legacy_screen_get_default ();
787 matcher = bamf_matcher_get_default ();
788 cleanup_matcher_tables (matcher);
789 export_matcher_on_bus (matcher);
790
791 bamf_matcher_load_desktop_file (matcher, DATA_DIR"/bamf-qml-app.desktop");
792
793 guint xid = g_random_int ();
794 test_win = bamf_legacy_window_test_new (xid, "QmlAppWin1", NULL, "/path/qmlscene bamf_qml_app.qml");
795 bamf_legacy_window_test_set_wmclass (test_win, NULL, NULL);
796 _bamf_legacy_screen_open_test_window (screen, test_win);
797
798 app1 = bamf_matcher_get_application_by_xid (matcher, xid);
799 g_assert (BAMF_IS_APPLICATION (app1));
800 g_assert_cmpstr (bamf_application_get_desktop_file (app1), ==, DATA_DIR"/bamf-qml-app.desktop");
801
802 xid = g_random_int ();
803 test_win = bamf_legacy_window_test_new (xid, "QmlAppWin1", NULL, "qmlscene files/foo/bamf_qml_app.qml");
804 bamf_legacy_window_test_set_wmclass (test_win, NULL, NULL);
805 _bamf_legacy_screen_open_test_window (screen, test_win);
806
807 app2 = bamf_matcher_get_application_by_xid (matcher, xid);
808 g_assert (BAMF_IS_APPLICATION (app2));
809 g_assert (app1 == app2);
810
811 xid = g_random_int ();
812 test_win = bamf_legacy_window_test_new (xid, "QmlApp2", NULL, "qmlscene qmlapp2.qml");
813 bamf_legacy_window_test_set_wmclass (test_win, NULL, NULL);
814 _bamf_legacy_screen_open_test_window (screen, test_win);
815
816 app3 = bamf_matcher_get_application_by_xid (matcher, xid);
817 g_assert (BAMF_IS_APPLICATION (app3));
818 g_assert (app2 != app3);
819
820 g_object_unref (matcher);
821 g_object_unref (screen);
822}
823
824static void
825test_match_desktop_file_hint_exec (void)
826{
827 BamfMatcher *matcher;
828 BamfLegacyScreen *screen;
829 BamfLegacyWindowTest *test_win;
830 BamfApplication *app1, *app2, *app3;
831
832 screen = bamf_legacy_screen_get_default ();
833 matcher = bamf_matcher_get_default ();
834 cleanup_matcher_tables (matcher);
835 export_matcher_on_bus (matcher);
836
837 bamf_matcher_load_desktop_file (matcher, TEST_BAMF_APP_DESKTOP);
838
839 guint xid = g_random_int ();
840 const gchar *exec = "/path/qmlscene --desktop_file_hint "TEST_BAMF_APP_DESKTOP" test-qml-app1.qml";
841 test_win = bamf_legacy_window_test_new (xid, "QmlAppWin1", NULL, exec);
842 _bamf_legacy_screen_open_test_window (screen, test_win);
843
844 app1 = bamf_matcher_get_application_by_xid (matcher, xid);
845 g_assert_cmpstr (bamf_application_get_desktop_file (app1), ==, TEST_BAMF_APP_DESKTOP);
846 _bamf_legacy_screen_close_test_window (screen, test_win);
847
848 xid = g_random_int ();
849 exec = "/path/qmlscene test-qml-app2.qml --desktop_file_hint "TEST_BAMF_APP_DESKTOP;
850 test_win = bamf_legacy_window_test_new (xid, "QmlAppWin2", NULL, exec);
851 bamf_legacy_window_test_set_wmclass (test_win, NULL, NULL);
852 _bamf_legacy_screen_open_test_window (screen, test_win);
853
854 app2 = bamf_matcher_get_application_by_xid (matcher, xid);
855 g_assert_cmpstr (bamf_application_get_desktop_file (app2), ==, TEST_BAMF_APP_DESKTOP);
856 _bamf_legacy_screen_close_test_window (screen, test_win);
857
858 xid = g_random_int ();
859 exec = "test-bamf-app --desktop_file_hint "TEST_BAMF_APP_DESKTOP;
860 test_win = bamf_legacy_window_test_new (xid, "AnyAppWin1", NULL, exec);
861 bamf_legacy_window_test_set_wmclass (test_win, NULL, NULL);
862 _bamf_legacy_screen_open_test_window (screen, test_win);
863
864 app3 = bamf_matcher_get_application_by_xid (matcher, xid);
865 g_assert_cmpstr (bamf_application_get_desktop_file (app3), ==, TEST_BAMF_APP_DESKTOP);
866
867 g_object_unref (matcher);
868 g_object_unref (screen);
869}
870
871static void
872test_match_desktop_file_hint_exec_invalid (void)
873{
874 BamfMatcher *matcher;
875 BamfLegacyScreen *screen;
876 BamfLegacyWindowTest *test_win;
877 BamfApplication *app1, *app2, *app3;
878
879 screen = bamf_legacy_screen_get_default ();
880 matcher = bamf_matcher_get_default ();
881 cleanup_matcher_tables (matcher);
882 export_matcher_on_bus (matcher);
883
884 bamf_matcher_load_desktop_file (matcher, TEST_BAMF_APP_DESKTOP);
885
886 guint xid = g_random_int ();
887 const gchar *exec = "/path/qmlscene --desktop_file_hint invalid-file.desktop test-qml-app1.qml";
888 test_win = bamf_legacy_window_test_new (xid, "QmlAppWin1", NULL, exec);
889 _bamf_legacy_screen_open_test_window (screen, test_win);
890
891 app1 = bamf_matcher_get_application_by_xid (matcher, xid);
892 g_assert_cmpstr (bamf_application_get_desktop_file (app1), ==, NULL);
893
894 xid = g_random_int ();
895 exec = "/path/qmlscene test-qml-app2.qml --desktop_file_hint "TEST_BAMF_APP_DESKTOP"s";
896 test_win = bamf_legacy_window_test_new (xid, "QmlAppWin2", NULL, exec);
897 bamf_legacy_window_test_set_wmclass (test_win, NULL, NULL);
898 _bamf_legacy_screen_open_test_window (screen, test_win);
899
900 app2 = bamf_matcher_get_application_by_xid (matcher, xid);
901 g_assert_cmpstr (bamf_application_get_desktop_file (app2), ==, NULL);
902 g_assert (app2 != app1);
903 _bamf_legacy_screen_close_test_window (screen, test_win);
904
905 xid = g_random_int ();
906 exec = "test-bamf-app --desktop_file_hint invalid-file";
907 test_win = bamf_legacy_window_test_new (xid, "AnyAppWin1", NULL, exec);
908 bamf_legacy_window_test_set_wmclass (test_win, NULL, NULL);
909 _bamf_legacy_screen_open_test_window (screen, test_win);
910
911 app3 = bamf_matcher_get_application_by_xid (matcher, xid);
912 g_assert_cmpstr (bamf_application_get_desktop_file (app3), ==, TEST_BAMF_APP_DESKTOP);
913 g_assert (app3 != app1);
914 g_assert (app3 != app2);
915
916 g_object_unref (matcher);
917 g_object_unref (screen);
918}
919
920static void
774test_match_transient_windows (void)921test_match_transient_windows (void)
775{922{
776 BamfMatcher *matcher;923 BamfMatcher *matcher;
@@ -830,6 +977,10 @@
830 g_assert_cmpstr (trimmed, ==, "bad-prefix-bin");977 g_assert_cmpstr (trimmed, ==, "bad-prefix-bin");
831 g_free (trimmed);978 g_free (trimmed);
832979
980 trimmed = bamf_matcher_get_trimmed_exec (matcher, "gksu python very-bad-prefix-script.py");
981 g_assert_cmpstr (trimmed, ==, "very-bad-prefix-script");
982 g_free (trimmed);
983
833 trimmed = bamf_matcher_get_trimmed_exec (matcher, "sudo --opt val=X /usr/bin/bad-prefix-bin");984 trimmed = bamf_matcher_get_trimmed_exec (matcher, "sudo --opt val=X /usr/bin/bad-prefix-bin");
834 g_assert_cmpstr (trimmed, ==, "bad-prefix-bin");985 g_assert_cmpstr (trimmed, ==, "bad-prefix-bin");
835 g_free (trimmed);986 g_free (trimmed);
@@ -846,6 +997,22 @@
846 g_assert_cmpstr (trimmed, ==, "python");997 g_assert_cmpstr (trimmed, ==, "python");
847 g_free (trimmed);998 g_free (trimmed);
848999
1000 trimmed = bamf_matcher_get_trimmed_exec (matcher, "/usr/bin/mono /usr/share/bar/Foo.exe");
1001 g_assert_cmpstr (trimmed, ==, "foo.exe");
1002 g_free (trimmed);
1003
1004 trimmed = bamf_matcher_get_trimmed_exec (matcher, "/usr/bin/mono %u --option val=/path");
1005 g_assert_cmpstr (trimmed, ==, "mono");
1006 g_free (trimmed);
1007
1008 trimmed = bamf_matcher_get_trimmed_exec (matcher, "/usr/bin/cli /usr/share/foo/Bar.exe");
1009 g_assert_cmpstr (trimmed, ==, "bar.exe");
1010 g_free (trimmed);
1011
1012 trimmed = bamf_matcher_get_trimmed_exec (matcher, "/usr/bin/cli %u --option val=/path");
1013 g_assert_cmpstr (trimmed, ==, "cli");
1014 g_free (trimmed);
1015
849 trimmed = bamf_matcher_get_trimmed_exec (matcher, "sh -c \"binary --option --value %U || exec binary\"");1016 trimmed = bamf_matcher_get_trimmed_exec (matcher, "sh -c \"binary --option --value %U || exec binary\"");
850 g_assert_cmpstr (trimmed, ==, "binary");1017 g_assert_cmpstr (trimmed, ==, "binary");
851 g_free (trimmed);1018 g_free (trimmed);
@@ -872,6 +1039,34 @@
872 g_assert_cmpstr (trimmed, ==, "myprog");1039 g_assert_cmpstr (trimmed, ==, "myprog");
873 g_free (trimmed);1040 g_free (trimmed);
8741041
1042 trimmed = bamf_matcher_get_trimmed_exec (matcher, "/usr/bin/qmlscene my-app.qml");
1043 g_assert_cmpstr (trimmed, ==, "my-app");
1044 g_free (trimmed);
1045
1046 trimmed = bamf_matcher_get_trimmed_exec (matcher, "qmlscene /home/user/new-app.qml");
1047 g_assert_cmpstr (trimmed, ==, "new-app");
1048 g_free (trimmed);
1049
1050 trimmed = bamf_matcher_get_trimmed_exec (matcher, "qmlscene $var /home/user/var-new-app.qml");
1051 g_assert_cmpstr (trimmed, ==, "var-new-app");
1052 g_free (trimmed);
1053
1054 trimmed = bamf_matcher_get_trimmed_exec (matcher, "qmlscene --option -foo /home/user/opt-app.qml");
1055 g_assert_cmpstr (trimmed, ==, "opt-app");
1056 g_free (trimmed);
1057
1058 trimmed = bamf_matcher_get_trimmed_exec (matcher, "qmlscene --desktop_file_hint deskapp.desktop desktop-app1.qml");
1059 g_assert_cmpstr (trimmed, ==, "desktop-app1");
1060 g_free (trimmed);
1061
1062 trimmed = bamf_matcher_get_trimmed_exec (matcher, "qmlscene desktop-app2.qml --desktop_file_hint deskapp.desktop");
1063 g_assert_cmpstr (trimmed, ==, "desktop-app2");
1064 g_free (trimmed);
1065
1066 trimmed = bamf_matcher_get_trimmed_exec (matcher, "qmlscene desktop-app3.qml --desktop_file_hint");
1067 g_assert_cmpstr (trimmed, ==, "desktop-app3");
1068 g_free (trimmed);
1069
875 const char *exec = "/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java " \1070 const char *exec = "/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java " \
876 "-Xbootclasspath/a:/usr/share/icedtea-web/netx.jar " \1071 "-Xbootclasspath/a:/usr/share/icedtea-web/netx.jar " \
877 "-Xms8m -Djava.security.manager " \1072 "-Xms8m -Djava.security.manager " \
@@ -899,3 +1094,29 @@
8991094
900 g_object_unref (matcher);1095 g_object_unref (matcher);
901}1096}
1097
1098void
1099test_matcher_create_suite (GDBusConnection *connection)
1100{
1101 gdbus_connection = connection;
1102
1103 g_test_add_func (DOMAIN"/Allocation", test_allocation);
1104 g_test_add_func (DOMAIN"/ExecStringTrimming", test_trim_exec_string);
1105 g_test_add_func (DOMAIN"/LoadDesktopFile", test_load_desktop_file);
1106 g_test_add_func (DOMAIN"/LoadDesktopFile/NoDisplay/SameID", test_load_desktop_file_no_display_has_lower_prio_same_id);
1107 g_test_add_func (DOMAIN"/LoadDesktopFile/NoDisplay/DifferentID", test_load_desktop_file_no_display_has_lower_prio_different_id);
1108 g_test_add_func (DOMAIN"/OpenWindows", test_open_windows);
1109 g_test_add_func (DOMAIN"/Matching/Application/Desktop", test_match_desktop_application);
1110 g_test_add_func (DOMAIN"/Matching/Application/DesktopLess", test_match_desktopless_application);
1111 g_test_add_func (DOMAIN"/Matching/Application/DesktopFileHintExec", test_match_desktop_file_hint_exec);
1112 g_test_add_func (DOMAIN"/Matching/Application/DesktopFileHintExec/Invalid", test_match_desktop_file_hint_exec_invalid);
1113 g_test_add_func (DOMAIN"/Matching/Application/LibreOffice", test_match_libreoffice_windows);
1114 g_test_add_func (DOMAIN"/Matching/Application/GnomeControlCenter", test_match_gnome_control_center_panels);
1115 g_test_add_func (DOMAIN"/Matching/Application/JavaWebStart", test_match_javaws_windows);
1116 g_test_add_func (DOMAIN"/Matching/Application/JavaWebStart/HintIngored", test_match_javaws_windows_hint_ignored);
1117 g_test_add_func (DOMAIN"/Matching/Application/JavaWebStart/NoDesktopMatch", test_match_javaws_windows_no_desktop_match);
1118 g_test_add_func (DOMAIN"/Matching/Application/Qml/NoDesktopMatch", test_match_qml_app_no_desktop);
1119 g_test_add_func (DOMAIN"/Matching/Application/Qml/DesktopMatch", test_match_qml_app_desktop);
1120 g_test_add_func (DOMAIN"/Matching/Windows/UnmatchedOnNewDesktop", test_new_desktop_matches_unmatched_windows);
1121 g_test_add_func (DOMAIN"/Matching/Windows/Transient", test_match_transient_windows);
1122}
9021123
=== added file 'tests/data/bamf-qml-app.desktop'
--- tests/data/bamf-qml-app.desktop 1970-01-01 00:00:00 +0000
+++ tests/data/bamf-qml-app.desktop 2013-07-25 12:39:27 +0000
@@ -0,0 +1,8 @@
1[Desktop Entry]
2Name=Bamf Qml APP
3Exec=qmlscene bamf_qml_app.qml
4Icon=bamf-qml-icon
5Terminal=false
6Type=Application
7StartupNotify=true
8OnlyShowIn=GNOME;Unity;
09
=== added file 'tests/data/bin/qmlscene'

Subscribers

People subscribed via source and target branches