app-manager/app-manager.c
changeset 28 c880957671f6
parent 12 1d18b9c34d26
child 31 a53fcb780468
     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