diff -r 1d18b9c34d26 -r c880957671f6 app-manager/app-manager.c --- a/app-manager/app-manager.c Thu Nov 10 11:00:49 2011 +0000 +++ b/app-manager/app-manager.c Mon Nov 17 11:36:20 2014 +0000 @@ -19,13 +19,21 @@ #include "config.h" #include #include +#ifdef WIN32 +#include +#endif /* WIN32 */ +#include #include #include #include -#include +#include +#include +#include #include "app-manager.h" #include "localmedia.h" +LUALIB_API int luaopen_posix(lua_State *L); + #define LOGO_NAME "plover-applications" GtkBuilder *ui; @@ -103,6 +111,7 @@ } } +#if 0 /* Checks whether a loader for SVG files has been registered * with GdkPixbuf. */ @@ -191,21 +200,61 @@ icon_set=gtk_icon_factory_lookup_default(LOGO_NAME); gtk_window_set_default_icon_name(LOGO_NAME); } +#endif + +static void install_icons(void) +{ + GtkIconSet *icon_set; + plover_icons_add_to_stock("apps",LOGO_NAME); + icon_set=gtk_icon_factory_lookup_default(LOGO_NAME); + gtk_window_set_default_icon_name(LOGO_NAME); +} int main(int argc,char **argv) { GError *err=0; GtkWidget *w; gchar *s,*contents; + gchar *setup_base=NULL,*update_base=NULL; gsize len; PloverPackageSet *set; + GSList *objects,*lnk; + gboolean started; GOptionEntry options[]={ + {"setup",0,0,G_OPTION_ARG_FILENAME,&setup_base, + "Setup from installation media","path"}, + {"update",0,0,G_OPTION_ARG_FILENAME,&update_base, + "Update from upgrade media","path"}, {NULL} }; +#ifdef WIN32 + /* + * app-manager is normally a GUI application, but rpm scripts may well + * call console applications and it looks ugly if console windows keep + * popping up. Avoid this by allocating our own console and hiding it. + * Note: + * - If app-manager is a console application (typically for debugging), + * then skip this step. + * - Call ShowWindow twice to negate special handling on first call. + */ + if (!GetConsoleWindow()) + { + AllocConsole(); + ShowWindow(GetConsoleWindow(),SW_HIDE); + ShowWindow(GetConsoleWindow(),SW_HIDE); + } +#endif + razor_set_lua_loader("posix",luaopen_posix); + razor_set_lua_loader("whelk",luaopen_whelk); if (!gtk_init_with_args(&argc,&argv,NULL,options,NULL,&err)) { - g_printerr("%s",err->message); - exit(0); + g_printerr("%s\n",err->message); + exit(1); + } + if (setup_base && update_base) + { + g_printerr("--setup and --update are mutually exclusive\n"); + exit(1); } #ifdef WIN32 prefix=g_win32_get_package_installation_directory_of_module(NULL); @@ -242,23 +291,45 @@ gtk_builder_connect_signals(ui,NULL); gtk_link_button_set_uri_hook(show_uri,NULL,NULL); installed=GTK_TREE_MODEL(plover_package_store_new()); - set=plover_package_set_new_from_installed("",NULL); - if (set) + set=plover_package_set_new(); + (void)plover_package_set_open(set,"",TRUE,NULL); + plover_package_store_add_set(PLOVER_PACKAGE_STORE(installed),set); + if (plover_package_set_get_no_details(set)) { - plover_package_store_add_set(PLOVER_PACKAGE_STORE(installed),set); - if (plover_package_set_get_no_details(set)) - { - w=GTK_WIDGET(gtk_builder_get_object(ui,"ViewFiles")); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w),TRUE); - } + w=GTK_WIDGET(gtk_builder_get_object(ui,"ViewFiles")); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w),TRUE); } applications=plover_applications_model_new(installed); set_package_model(applications); - gtk_main(); - g_object_unref(ui); + if (setup_base) + started=setup(set,setup_base); + else if (update_base) + started=update(set,update_base); + else + { + w=GTK_WIDGET(gtk_builder_get_object(ui,"MainWindow")); + gtk_widget_show(w); + started=TRUE; + } + if (started) + gtk_main(); + g_clear_object(&set); + objects=gtk_builder_get_objects(ui); + for(lnk=objects;lnk;lnk=lnk->next) + if (GTK_IS_WIDGET(lnk->data) && + gtk_widget_is_toplevel(GTK_WIDGET(lnk->data))) + gtk_widget_destroy(GTK_WIDGET(lnk->data)); + g_slist_free(objects); + g_clear_object(&ui); + g_clear_object(&installed); + g_clear_object(&applications); + g_clear_object(&location); + g_clear_object(&local_media); if (relocations) razor_relocations_destroy(relocations); g_free(prefix); + g_free(setup_base); + g_free(update_base); exit(0); } @@ -323,7 +394,7 @@ { show_busy_cursor(TRUE); path=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); - set=plover_package_set_new_from_repository(path,relocations,&err); + set=plover_package_set_new_from_yum(path,relocations,&err); if (set) { if (!location) @@ -399,7 +470,8 @@ GtkWidget *w=GTK_WIDGET(gtk_builder_get_object(ui,"MainWindow")); gtk_show_about_dialog(GTK_WINDOW(w),"name",PACKAGE_NAME, "version",PACKAGE_VERSION,"comments","Application Manager", - "copyright","Copyright © 2010 J. Ali Harlow","logo-icon-name",LOGO_NAME, + "copyright","Copyright © 2010, 2014 J. Ali Harlow", + "logo-icon-name",LOGO_NAME, NULL); }