summaryrefslogtreecommitdiff
path: root/community/lxlauncher/lxlauncher-0.2.1-fix-for-the-new-behavior-of-libmenu-cache-0.3-series.patch
blob: 1720d3e62c065d0edb3555ad5e86d8cf2cacb97f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
From a7dad81b883a783bc1ac4f8092a1571b7f843914 Mon Sep 17 00:00:00 2001
From: Hong Jen Yee (PCMan) <pcman.tw@gmail.com>
Date: Wed, 17 Feb 2010 22:42:01 +0800
Subject: [PATCH 50/50] Fix for the new behavior of libmenu-cache 0.3 series.

---
 src/lxlauncher.c |   67 +++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 47 insertions(+), 20 deletions(-)

diff --git a/src/lxlauncher.c b/src/lxlauncher.c
index 6dfbbc9..3a39bc6 100644
--- a/src/lxlauncher.c
+++ b/src/lxlauncher.c
@@ -663,21 +663,40 @@ gchar* get_xdg_config_file(const char *name) {
     gchar *file;
 
     file = g_build_filename(user_dir, name, NULL);
-    if (g_file_test(file, G_FILE_TEST_EXISTS) == TRUE) {
-	return file;
-    }
+    if (g_file_test(file, G_FILE_TEST_EXISTS) == TRUE)
+    	return file;
     free(file);
 
     for (dir = system_dirs; *dir; ++dir ) {
-	file = g_build_filename(*dir, name, NULL);
-	if (g_file_test(file, G_FILE_TEST_EXISTS) == TRUE) {
-	    return file;
-	}
-	free(file);
+        file = g_build_filename(*dir, name, NULL);
+        if (g_file_test(file, G_FILE_TEST_EXISTS) == TRUE)
+            return file;
+	    free(file);
     }
     return NULL;
 }
 
+static void on_menu_cache_reload(MenuCache* mc, gpointer user_data)
+{
+    GMainLoop* mainloop = (GMainLoop*)user_data;
+    g_main_loop_quit(mainloop);
+}
+
+MenuCache* _menu_cache_lookup_sync( const char* menu_name )
+{
+    MenuCache* mc = menu_cache_lookup(menu_name);
+    /* ensure that the menu cache is loaded */
+    if(! menu_cache_get_root_dir(mc)) /* if it's not yet loaded */
+    {
+        GMainLoop* mainloop = g_main_loop_new(NULL, FALSE);
+        gpointer notify_id = menu_cache_add_reload_notify(mc, on_menu_cache_reload, mainloop);
+        g_main_loop_run(mainloop);
+        g_main_loop_unref(mainloop);
+        menu_cache_remove_reload_notify(mc, notify_id);
+    }
+    return mc;
+}
+
 int main(int argc, char** argv)
 {
     int i;
@@ -697,13 +716,14 @@ int main(int argc, char** argv)
     GError *error = NULL;
     gchar *config_file = get_xdg_config_file(CONFIG_FILE);
     if (config_file &&
-	g_key_file_load_from_file(key_file,
-				  config_file,
-				  G_KEY_FILE_NONE,
-				  &error)) {
-	printf("Loaded %s\n", config_file);
-    } else {
-	perror("Error loading " CONFIG_FILE);
+        g_key_file_load_from_file(key_file,
+                      config_file,
+                      G_KEY_FILE_NONE,
+                      &error)) {
+    	printf("Loaded %s\n", config_file);
+    }
+    else {
+    	perror("Error loading " CONFIG_FILE);
     }
     if (config_file)
 	free(config_file);
@@ -719,15 +739,17 @@ int main(int argc, char** argv)
     gchar* gtkrc_file = get_xdg_config_file("lxlauncher/gtkrc");
     gtk_rc_parse(gtkrc_file);
     if (gtkrc_file) {
-	free(gtkrc_file);
+    	free(gtkrc_file);
     }
 
     button_size = g_key_file_get_integer(key_file, "Main", "BUTTON_SIZE", NULL);
     img_size = g_key_file_get_integer(key_file, "Main", "IMG_SIZE", NULL);
 
     // to prevent from going without configure file
-    if(!button_size) button_size = BUTTON_SIZE_FALLBACK;
-    if(!img_size) img_size = IMG_SIZE_FALLBACK;
+    if(!button_size)
+        button_size = BUTTON_SIZE_FALLBACK;
+    if(!img_size)
+        img_size = IMG_SIZE_FALLBACK;
 
     icon_size = gtk_icon_size_register( "ALIcon", img_size, img_size );
 
@@ -758,9 +780,14 @@ int main(int argc, char** argv)
     gtk_container_add( (GtkContainer*)main_window, notebook );
 
     g_setenv("XDG_MENU_PREFIX", "lxlauncher-", TRUE);
-    menu_tree = menu_cache_lookup( "applications.menu" );
+    menu_tree = _menu_cache_lookup_sync( "applications.menu" );
+    if(!menu_tree)
+    {
+        g_print("Unable to load application menu\n");
+        return 1;
+    }
+    root_dir = menu_cache_item_ref(menu_cache_get_root_dir( menu_tree ));
     reload_notify_id = menu_cache_add_reload_notify( menu_tree, on_menu_tree_changed, NULL );
-    root_dir = menu_cache_ref(menu_cache_get_root_dir( menu_tree ));
 
     create_notebook_pages();
 
-- 
1.6.6