summaryrefslogtreecommitdiff
blob: 473b516b8a60d77e5f06adfdee592d134f963d07 (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
--- src/lxlauncher.c	2009-07-07 15:48:19.000000000 +0300
+++ src/lxlauncher.c.new	2010-06-09 21:09:24.000000000 +0300
@@ -311,6 +311,7 @@
 {
     // Dirty hacks used to force pseudo-transparent background
     gtk_widget_queue_draw( data->table );
+    return TRUE;
 }
 
 // Dirty hacks used to reduce unnecessary redrew during scroll
@@ -662,18 +663,38 @@
     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)
@@ -695,13 +716,14 @@
     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);
@@ -711,21 +733,23 @@
     // Add application specific properties
     gtk_settings_install_property(g_param_spec_boolean("lxlauncher-enable-key",
                             _("Enable key navigation"),
-                            _("Allow users to use up/down/left/right/tab/enter keys to operate the lxlaucher"),
+                            _("Allow users to use up/down/left/right/tab/enter keys to operate the lxlauncher"),
                             FALSE,GTK_ARG_READWRITE));
     // set up themes for notebook
     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 );
 
@@ -756,9 +780,14 @@
     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();