--- 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();