Settings manager pluguns reloading patch

Olivier Fourdan fourdan at xfce.org
Tue Apr 1 21:33:57 CEST 2003


Looks fine to me. Please go ahead and commit that :)

Cheers,
Olivier.

On Tue, 2003-04-01 at 09:27, Jasper Huijsmans wrote:
> Hey Olivier,
> 
> What do you think? It seems to work for me. 
> 
> I could also add a reload button to the dialog, but I don't know if we
> want to expose that detail to the user. It can be useful when installing
> new modules.
> 
> 	Jasper
> 
> Index: xfce-mcs-manager.c
> ===================================================================
> RCS file:
> /cvsroot/xfce/xfce-devel/xfce-mcs-manager/xfce-mcs-manager/xfce-mcs-man
> ager.c,v retrieving revision 1.15
> diff -u -r1.15 xfce-mcs-manager.c
> --- xfce-mcs-manager.c	29 Mar 2003 20:18:55 -0000	1.15
> +++ xfce-mcs-manager.c	1 Apr 2003 07:17:09 -0000
> @@ -51,6 +51,7 @@
>  #define SOEXT_LEN       (strlen (SOEXT))
>  
>  static GSList *plugin_list = NULL;
> +static GSList *module_list = NULL;
>  
>  McsManager *manager;
>  
> @@ -123,6 +124,7 @@
>                      plugin->plugin_name);
>  #endif
>              plugin_list = g_slist_append(plugin_list, plugin);
> +	    module_list = g_slist_append(module_list, gm);
>          }
>      }
>      else {
> @@ -175,6 +177,29 @@
>  }
>  
>  static void
> +plugin_unload_all(void)
> +{
> +    g_slist_foreach(module_list, (GFunc)g_module_close, NULL);
> +    g_slist_free(module_list);
> +    module_list=NULL;
> +
> +    g_slist_foreach(plugin_list, (GFunc)g_free, NULL);
> +    g_slist_free(plugin_list);
> +    plugin_list=NULL;
> +}
> +
> +void
> +reload_plugins(void)
> +{
> +    gdk_x11_grab_server();
> +    plugin_unload_all();
> +
> +    plugin_load_all();
> +    gdk_x11_ungrab_server();
> +    gdk_flush();
> +}
> +
> +static void
>  terminate_cb(void *data)
>  {
>      gboolean *terminated = data;
> @@ -210,7 +235,7 @@
>                  "Multi-Channel Manager Error:\nNo such plugin \"%s\"",
> name);         gtk_dialog_run(GTK_DIALOG(dialog));
>          gtk_widget_destroy(dialog);
> -	    run_manager_dialog(plugin_list);
> +	run_manager_dialog(plugin_list);
>      }
>  }
>  
> @@ -223,9 +248,16 @@
>          return GDK_FILTER_CONTINUE;
>  }
>  
> +static void
> +sighandler(int sig)
> +{
> +    reload_plugins();
> +}
> +
>  static int
>  run_daemon(int argc, char **argv, gboolean daemon_mode)
>  {
> +    struct sigaction act;
>      McsManagerCheck status;
>      gboolean std_mgr = TRUE;
>  
> @@ -269,6 +301,10 @@
>  
>      plugin_load_all();
>      gdk_flush();
> +
> +    act.sa_handler = sighandler;
> +    act.sa_flags = 0;
> +    sigaction(SIGHUP, &act, NULL);
>  
>      if(daemon_mode) {
>  	    switch (fork()) {
> _______________________________________________
> Xfce4-dev mailing list
> Xfce4-dev at xfce.org
> http://moongroup.com/mailman/listinfo/xfce4-dev
-- 
Olivier Fourdan <fourdan at xfce.org>
http://www.xfce.org




More information about the Xfce4-dev mailing list