1.1 --- a/app-manager/app-manager.c Thu Nov 10 11:00:49 2011 +0000
1.2 +++ b/app-manager/app-manager.c Mon Nov 17 11:36:20 2014 +0000
1.3 @@ -19,13 +19,21 @@
1.4 #include "config.h"
1.5 #include <stdlib.h>
1.6 #include <string.h>
1.7 +#ifdef WIN32
1.8 +#include <windows.h>
1.9 +#endif /* WIN32 */
1.10 +#include <lua.h>
1.11 #include <glib.h>
1.12 #include <gio/gio.h>
1.13 #include <gtk/gtk.h>
1.14 -#include <plover-gtk/packageset.h>
1.15 +#include <whelk/whelk.h>
1.16 +#include <plover/packageset.h>
1.17 +#include <plover-gtk/stockicons.h>
1.18 #include "app-manager.h"
1.19 #include "localmedia.h"
1.20
1.21 +LUALIB_API int luaopen_posix(lua_State *L);
1.22 +
1.23 #define LOGO_NAME "plover-applications"
1.24
1.25 GtkBuilder *ui;
1.26 @@ -103,6 +111,7 @@
1.27 }
1.28 }
1.29
1.30 +#if 0
1.31 /* Checks whether a loader for SVG files has been registered
1.32 * with GdkPixbuf.
1.33 */
1.34 @@ -191,21 +200,61 @@
1.35 icon_set=gtk_icon_factory_lookup_default(LOGO_NAME);
1.36 gtk_window_set_default_icon_name(LOGO_NAME);
1.37 }
1.38 +#endif
1.39 +
1.40 +static void install_icons(void)
1.41 +{
1.42 + GtkIconSet *icon_set;
1.43 + plover_icons_add_to_stock("apps",LOGO_NAME);
1.44 + icon_set=gtk_icon_factory_lookup_default(LOGO_NAME);
1.45 + gtk_window_set_default_icon_name(LOGO_NAME);
1.46 +}
1.47
1.48 int main(int argc,char **argv)
1.49 {
1.50 GError *err=0;
1.51 GtkWidget *w;
1.52 gchar *s,*contents;
1.53 + gchar *setup_base=NULL,*update_base=NULL;
1.54 gsize len;
1.55 PloverPackageSet *set;
1.56 + GSList *objects,*lnk;
1.57 + gboolean started;
1.58 GOptionEntry options[]={
1.59 + {"setup",0,0,G_OPTION_ARG_FILENAME,&setup_base,
1.60 + "Setup from installation media","path"},
1.61 + {"update",0,0,G_OPTION_ARG_FILENAME,&update_base,
1.62 + "Update from upgrade media","path"},
1.63 {NULL}
1.64 };
1.65 +#ifdef WIN32
1.66 + /*
1.67 + * app-manager is normally a GUI application, but rpm scripts may well
1.68 + * call console applications and it looks ugly if console windows keep
1.69 + * popping up. Avoid this by allocating our own console and hiding it.
1.70 + * Note:
1.71 + * - If app-manager is a console application (typically for debugging),
1.72 + * then skip this step.
1.73 + * - Call ShowWindow twice to negate special handling on first call.
1.74 + */
1.75 + if (!GetConsoleWindow())
1.76 + {
1.77 + AllocConsole();
1.78 + ShowWindow(GetConsoleWindow(),SW_HIDE);
1.79 + ShowWindow(GetConsoleWindow(),SW_HIDE);
1.80 + }
1.81 +#endif
1.82 + razor_set_lua_loader("posix",luaopen_posix);
1.83 + razor_set_lua_loader("whelk",luaopen_whelk);
1.84 if (!gtk_init_with_args(&argc,&argv,NULL,options,NULL,&err))
1.85 {
1.86 - g_printerr("%s",err->message);
1.87 - exit(0);
1.88 + g_printerr("%s\n",err->message);
1.89 + exit(1);
1.90 + }
1.91 + if (setup_base && update_base)
1.92 + {
1.93 + g_printerr("--setup and --update are mutually exclusive\n");
1.94 + exit(1);
1.95 }
1.96 #ifdef WIN32
1.97 prefix=g_win32_get_package_installation_directory_of_module(NULL);
1.98 @@ -242,23 +291,45 @@
1.99 gtk_builder_connect_signals(ui,NULL);
1.100 gtk_link_button_set_uri_hook(show_uri,NULL,NULL);
1.101 installed=GTK_TREE_MODEL(plover_package_store_new());
1.102 - set=plover_package_set_new_from_installed("",NULL);
1.103 - if (set)
1.104 + set=plover_package_set_new();
1.105 + (void)plover_package_set_open(set,"",TRUE,NULL);
1.106 + plover_package_store_add_set(PLOVER_PACKAGE_STORE(installed),set);
1.107 + if (plover_package_set_get_no_details(set))
1.108 {
1.109 - plover_package_store_add_set(PLOVER_PACKAGE_STORE(installed),set);
1.110 - if (plover_package_set_get_no_details(set))
1.111 - {
1.112 - w=GTK_WIDGET(gtk_builder_get_object(ui,"ViewFiles"));
1.113 - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w),TRUE);
1.114 - }
1.115 + w=GTK_WIDGET(gtk_builder_get_object(ui,"ViewFiles"));
1.116 + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w),TRUE);
1.117 }
1.118 applications=plover_applications_model_new(installed);
1.119 set_package_model(applications);
1.120 - gtk_main();
1.121 - g_object_unref(ui);
1.122 + if (setup_base)
1.123 + started=setup(set,setup_base);
1.124 + else if (update_base)
1.125 + started=update(set,update_base);
1.126 + else
1.127 + {
1.128 + w=GTK_WIDGET(gtk_builder_get_object(ui,"MainWindow"));
1.129 + gtk_widget_show(w);
1.130 + started=TRUE;
1.131 + }
1.132 + if (started)
1.133 + gtk_main();
1.134 + g_clear_object(&set);
1.135 + objects=gtk_builder_get_objects(ui);
1.136 + for(lnk=objects;lnk;lnk=lnk->next)
1.137 + if (GTK_IS_WIDGET(lnk->data) &&
1.138 + gtk_widget_is_toplevel(GTK_WIDGET(lnk->data)))
1.139 + gtk_widget_destroy(GTK_WIDGET(lnk->data));
1.140 + g_slist_free(objects);
1.141 + g_clear_object(&ui);
1.142 + g_clear_object(&installed);
1.143 + g_clear_object(&applications);
1.144 + g_clear_object(&location);
1.145 + g_clear_object(&local_media);
1.146 if (relocations)
1.147 razor_relocations_destroy(relocations);
1.148 g_free(prefix);
1.149 + g_free(setup_base);
1.150 + g_free(update_base);
1.151 exit(0);
1.152 }
1.153
1.154 @@ -323,7 +394,7 @@
1.155 {
1.156 show_busy_cursor(TRUE);
1.157 path=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
1.158 - set=plover_package_set_new_from_repository(path,relocations,&err);
1.159 + set=plover_package_set_new_from_yum(path,relocations,&err);
1.160 if (set)
1.161 {
1.162 if (!location)
1.163 @@ -399,7 +470,8 @@
1.164 GtkWidget *w=GTK_WIDGET(gtk_builder_get_object(ui,"MainWindow"));
1.165 gtk_show_about_dialog(GTK_WINDOW(w),"name",PACKAGE_NAME,
1.166 "version",PACKAGE_VERSION,"comments","Application Manager",
1.167 - "copyright","Copyright © 2010 J. Ali Harlow","logo-icon-name",LOGO_NAME,
1.168 + "copyright","Copyright © 2010, 2014 J. Ali Harlow",
1.169 + "logo-icon-name",LOGO_NAME,
1.170 NULL);
1.171 }
1.172