Migrate built-in plugin "dirmenu" to new plugins API.
authorAndriy Grytsenko <andrej@rep.kiev.ua>
Tue, 11 Feb 2014 01:04:58 +0000 (03:04 +0200)
committerAndriy Grytsenko <andrej@rep.kiev.ua>
Tue, 11 Feb 2014 01:04:58 +0000 (03:04 +0200)
src/plugin.c
src/plugins/dirmenu.c
src/private.h

index d64478a..fff1977 100644 (file)
@@ -120,7 +120,7 @@ static void init_plugin_class_list(void)
 #endif
 
 #ifdef STATIC_DIRMENU
-    REGISTER_STATIC_PLUGIN_CLASS(dirmenu_plugin_class);
+    REGISTER_STATIC_MODULE(dirmenu);
 #endif
 
 #ifdef STATIC_TASKBAR
@@ -459,6 +459,11 @@ static void _old_plugin_destroy(gpointer data)
     g_free(pl);
 }
 
+//static void on_size_allocate(GtkWidget *widget, GdkRectangle *allocation, Panel *p)
+//{
+//    _queue_panel_calculate_size(p);
+//}
+
 GtkWidget *lxpanel_add_plugin(Panel *p, const char *name, config_setting_t *cfg, gint at)
 {
     LXPanelPluginInit *init;
@@ -537,6 +542,7 @@ GtkWidget *lxpanel_add_plugin(Panel *p, const char *name, config_setting_t *cfg,
     gtk_widget_set_name(widget, init->name);
     gtk_box_pack_start(GTK_BOX(p->box), widget, expand, TRUE, padding);
     gtk_container_set_border_width(GTK_CONTAINER(widget), border);
+//    g_signal_connect(widget, "size-allocate", G_CALLBACK(on_size_allocate), p);
     gtk_widget_show(widget);
     g_object_set_qdata(G_OBJECT(widget), lxpanel_plugin_qconf, cfg);
     g_object_set_qdata(G_OBJECT(widget), lxpanel_plugin_qinit, init);
index 38f9ca9..0ae3808 100644 (file)
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2006 LxDE Developers, see the file AUTHORS for details.
+ * Copyright (c) 2006-2014 LxDE Developers, see the file AUTHORS for details.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #include <stdlib.h>
 #include <unistd.h>
 
-#include <gdk-pixbuf/gdk-pixbuf.h>
 #include <glib/gi18n.h>
+#include <libfm/fm-gtk.h>
 #include <string.h>
 
-#include "panel.h"
 #include "misc.h"
-#include "private.h"
-#include "dbg.h"
+#include "plugin.h"
 
 /* Temporary for sort of directory names. */
 typedef struct _directory_name {
@@ -37,63 +35,64 @@ typedef struct _directory_name {
 
 /* Private context for directory menu plugin. */
 typedef struct {
-    Plugin * plugin;                   /* Back pointer to plugin */
+    Panel * panel; /* The panel and settings are required to apply config */
+    config_setting_t * settings;
     char * image;                      /* Icon for top level widget */
     char * path;                       /* Top level path for widget */
     char * name;                       /* User's label for widget */
     GdkPixbuf * folder_icon;           /* Icon for folders */
 } DirMenuPlugin;
 
-static void dirmenu_open_in_file_manager(Plugin * p, const char * path);
-static void dirmenu_open_in_terminal(Plugin * p, const char * path);
-static void dirmenu_menuitem_open_directory(GtkWidget * item, Plugin * p);
-static void dirmenu_menuitem_open_in_terminal(GtkWidget * item, Plugin * p);
-static void dirmenu_menuitem_select(GtkMenuItem * item, Plugin * p);
-static void dirmenu_menuitem_deselect(GtkMenuItem * item, Plugin * p);
-void dirmenu_menu_selection_done(GtkWidget * menu, Plugin * p);
-static void dirmenu_popup_set_position(GtkWidget * menu, gint * px, gint * py, gboolean * push_in, Plugin * p);
-static GtkWidget * dirmenu_create_menu(Plugin * p, const char * path, gboolean open_at_top);
-static void dirmenu_show_menu(GtkWidget * widget, Plugin * p, int btn, guint32 time);
-static gboolean dirmenu_button_press_event(GtkWidget * widget, GdkEventButton * event, Plugin * p);
-static int dirmenu_constructor(Plugin * p, char ** fp);
-static void dirmenu_destructor(Plugin * p);
-static void dirmenu_apply_configuration_to_children(GtkWidget * w, DirMenuPlugin * dm);
-static void dirmenu_apply_configuration(Plugin * p);
-static void dirmenu_configure(Plugin * p, GtkWindow * parent);
-static void dirmenu_save_configuration(Plugin * p, FILE * fp);
-static void dirmenu_panel_configuration_changed(Plugin * p);
+static GtkWidget * dirmenu_create_menu(DirMenuPlugin * dm, const char * path, gboolean open_at_top);
+static void dirmenu_destructor(gpointer user_data);
+static gboolean dirmenu_apply_configuration(gpointer user_data);
 
 /* Open a specified path in a file manager. */
-static void dirmenu_open_in_file_manager(Plugin * p, const char * path)
+static gboolean dirmenu_open_in_file_manager(GAppLaunchContext* ctx, GList* folder_infos,
+                                             gpointer user_data, GError** err)
 {
-    char * quote = g_shell_quote(path);
-    const char * fm = lxpanel_get_file_manager();
-    char * cmd = ((strstr(fm, "%s") != NULL) ? g_strdup_printf(fm, quote) : g_strdup_printf("%s %s", fm, quote));
-    g_free(quote);
-    spawn_command_async(NULL, NULL, cmd);
-    g_free(cmd);
+    FmFileInfo *fi = folder_infos->data; /* only first is used */
+    GAppInfo *app = g_app_info_get_default_for_type("inode/directory", TRUE);
+    GFile *gf;
+    gboolean ret;
+
+    if (app == NULL)
+    {
+        g_set_error_literal(err, G_SHELL_ERROR, G_SHELL_ERROR_EMPTY_STRING,
+                            _("No file manager is configured."));
+        return FALSE;
+    }
+    gf = fm_path_to_gfile(fm_file_info_get_path(fi));
+    folder_infos = g_list_prepend(NULL, gf);
+    ret = fm_app_info_launch(app, folder_infos, ctx, err);
+    g_list_free(folder_infos);
+    g_object_unref(gf);
+    g_object_unref(app);
+    return ret;
 }
 
 /* Open a specified path in a terminal. */
-static void dirmenu_open_in_terminal(Plugin * p, const char * path)
+static void dirmenu_open_in_terminal(DirMenuPlugin * dm, const char * path)
 {
     fm_terminal_launch(path, NULL);
 }
 
 /* Handler for activate event on popup Open menu item. */
-static void dirmenu_menuitem_open_directory(GtkWidget * item, Plugin * p)
+static void dirmenu_menuitem_open_directory(GtkWidget * item, DirMenuPlugin * dm)
 {
-    dirmenu_open_in_file_manager(p, g_object_get_data(G_OBJECT(gtk_widget_get_parent(item)), "path"));
+    FmPath *path = fm_path_new_for_str(g_object_get_data(G_OBJECT(gtk_widget_get_parent(item)), "path"));
+    fm_launch_path_simple(NULL, NULL, path, dirmenu_open_in_file_manager, NULL);
+    fm_path_unref(path);
 }
 
 /* Handler for activate event on popup Open In Terminal menu item. */
-static void dirmenu_menuitem_open_in_terminal(GtkWidget * item, Plugin * p)
+static void dirmenu_menuitem_open_in_terminal(GtkWidget * item, DirMenuPlugin * dm)
 {
-    dirmenu_open_in_terminal(p, g_object_get_data(G_OBJECT(gtk_widget_get_parent(item)), "path"));
+    dirmenu_open_in_terminal(dm, g_object_get_data(G_OBJECT(gtk_widget_get_parent(item)), "path"));
 }
 
 /* Handler for select event on popup menu item. */
-static void dirmenu_menuitem_select(GtkMenuItem * item, Plugin * p)
+static void dirmenu_menuitem_select(GtkMenuItem * item, DirMenuPlugin * dm)
 {
     GtkWidget * sub = gtk_menu_item_get_submenu(item);
     if (sub != NULL)
@@ -107,7 +106,7 @@ static void dirmenu_menuitem_select(GtkMenuItem * item, Plugin * p)
                 (char *) g_object_get_data(G_OBJECT(parent), "path"),
                 (char *) g_object_get_data(G_OBJECT(item), "name"),
                 NULL);
-            sub = dirmenu_create_menu(p, path, TRUE);
+            sub = dirmenu_create_menu(dm, path, TRUE);
             g_free(path);
             gtk_menu_item_set_submenu(item, sub);
         }
@@ -115,35 +114,34 @@ static void dirmenu_menuitem_select(GtkMenuItem * item, Plugin * p)
 }
 
 /* Handler for deselect event on popup menu item. */
-static void dirmenu_menuitem_deselect(GtkMenuItem * item, Plugin * p)
+static void dirmenu_menuitem_deselect(GtkMenuItem * item, DirMenuPlugin * dm)
 {
     /* Delete old menu on deselect to save resource. */
     gtk_menu_item_set_submenu(item, gtk_menu_new());
 }
 
 /* Handler for selection-done event on popup menu. */
-void dirmenu_menu_selection_done(GtkWidget * menu, Plugin * p)
+static void dirmenu_menu_selection_done(GtkWidget * menu, DirMenuPlugin * dm)
 {
     gtk_widget_destroy(menu);
 }
 
 /* Position-calculation callback for popup menu. */
-static void dirmenu_popup_set_position(GtkWidget * menu, gint * px, gint * py, gboolean * push_in, Plugin * p)
+static void dirmenu_popup_set_position(GtkWidget * menu, gint * px, gint * py, gboolean * push_in, GtkWidget * p)
 {
+    DirMenuPlugin * dm = lxpanel_plugin_get_data(p);
     /* Get the allocation of the popup menu. */
     GtkRequisition popup_req;
     gtk_widget_size_request(menu, &popup_req);
 
     /* Determine the coordinates. */
-    plugin_popup_set_position_helper(p, p->pwid, menu, &popup_req, px, py);
+    lxpanel_plugin_popup_set_position_helper(dm->panel, p, menu, &popup_req, px, py);
     *push_in = TRUE;
 }
 
 /* Create a menu populated with all subdirectories. */
-static GtkWidget * dirmenu_create_menu(Plugin * p, const char * path, gboolean open_at_top)
+static GtkWidget * dirmenu_create_menu(DirMenuPlugin * dm, const char * path, gboolean open_at_top)
 {
-    DirMenuPlugin * dm = (DirMenuPlugin *) p->priv;
-
     /* Create a menu. */
     GtkWidget * menu = gtk_menu_new();
 
@@ -153,7 +151,7 @@ static GtkWidget * dirmenu_create_menu(Plugin * p, const char * path, gboolean o
         int h;
         gtk_icon_size_lookup_for_settings(gtk_widget_get_settings(menu), GTK_ICON_SIZE_MENU, &w, &h);
         dm->folder_icon = gtk_icon_theme_load_icon(
-            p->panel->icon_theme,
+            panel_get_icon_theme(dm->panel),
             "gnome-fs-directory", MAX(w, h), 0, NULL);
         if (dm->folder_icon == NULL)
             dm->folder_icon = gtk_widget_render_icon(menu, GTK_STOCK_DIRECTORY, GTK_ICON_SIZE_MENU, NULL);
@@ -229,15 +227,15 @@ static GtkWidget * dirmenu_create_menu(Plugin * p, const char * path, gboolean o
         g_free(dir_cursor);
 
         /* Connect signals. */
-        g_signal_connect(G_OBJECT(item), "select", G_CALLBACK(dirmenu_menuitem_select), p);
-        g_signal_connect(G_OBJECT(item), "deselect", G_CALLBACK(dirmenu_menuitem_deselect), p);
+        g_signal_connect(G_OBJECT(item), "select", G_CALLBACK(dirmenu_menuitem_select), dm);
+        g_signal_connect(G_OBJECT(item), "deselect", G_CALLBACK(dirmenu_menuitem_deselect), dm);
     }
 
     /* Create "Open" and "Open in Terminal" items. */
     GtkWidget * item = gtk_image_menu_item_new_from_stock( GTK_STOCK_OPEN, NULL );
-    g_signal_connect(item, "activate", G_CALLBACK(dirmenu_menuitem_open_directory), p);
+    g_signal_connect(item, "activate", G_CALLBACK(dirmenu_menuitem_open_directory), dm);
     GtkWidget * term = gtk_menu_item_new_with_mnemonic( _("Open in _Terminal") );
-    g_signal_connect(term, "activate", G_CALLBACK(dirmenu_menuitem_open_in_terminal), p);
+    g_signal_connect(term, "activate", G_CALLBACK(dirmenu_menuitem_open_in_terminal), dm);
 
     /* Insert or append based on caller's preference. */
     if (open_at_top)
@@ -258,101 +256,79 @@ static GtkWidget * dirmenu_create_menu(Plugin * p, const char * path, gboolean o
 }
 
 /* Show a menu of subdirectories. */
-static void dirmenu_show_menu(GtkWidget * widget, Plugin * p, int btn, guint32 time)
+static void dirmenu_show_menu(GtkWidget * widget, DirMenuPlugin * dm, int btn, guint32 time)
 {
-    DirMenuPlugin * dm = (DirMenuPlugin *) p->priv;
-
     /* Create a menu populated with all subdirectories. */
     GtkWidget * menu = dirmenu_create_menu(
-        p,
+        dm,
         ((dm->path != NULL) ? expand_tilda(dm->path) : g_get_home_dir()),
         FALSE);
-    g_signal_connect(menu, "selection-done", G_CALLBACK(dirmenu_menu_selection_done), NULL);
+    g_signal_connect(menu, "selection-done", G_CALLBACK(dirmenu_menu_selection_done), dm);
 
     /* Show the menu.  Use a positioning function to get it placed next to the top level widget. */
-    gtk_menu_popup(GTK_MENU(menu), NULL, NULL, (GtkMenuPositionFunc) dirmenu_popup_set_position, p, btn, time);
+    gtk_menu_popup(GTK_MENU(menu), NULL, NULL, (GtkMenuPositionFunc) dirmenu_popup_set_position, widget, btn, time);
 }
 
 /* Handler for button-press-event on top level widget. */
-static gboolean dirmenu_button_press_event(GtkWidget * widget, GdkEventButton * event, Plugin * p)
+static gboolean dirmenu_button_press_event(GtkWidget * widget, GdkEventButton * event, Panel * p)
 {
-    DirMenuPlugin * dm = (DirMenuPlugin *) p->priv;
+    DirMenuPlugin * dm = lxpanel_plugin_get_data(widget);
 
     /* Standard left-click handling. */
-    if (plugin_button_press_event(widget, event, p))
+    if (lxpanel_plugin_button_press_event(widget, event, p))
         return TRUE;
 
     if (event->button == 1)
     {
-        dirmenu_show_menu(widget, p, event->button, event->time);
+        dirmenu_show_menu(widget, dm, event->button, event->time);
     }
     else
     {
-        dirmenu_open_in_terminal(p, ((dm->path != NULL) ? expand_tilda(dm->path) : g_get_home_dir()));
+        dirmenu_open_in_terminal(dm, ((dm->path != NULL) ? expand_tilda(dm->path) : g_get_home_dir()));
     }
     return TRUE;
 }
 
 /* Plugin constructor. */
-static int dirmenu_constructor(Plugin * p, char ** fp)
+static GtkWidget *dirmenu_constructor(Panel *panel, config_setting_t *settings)
 {
     /* Allocate and initialize plugin context and set into Plugin private data pointer. */
     DirMenuPlugin * dm = g_new0(DirMenuPlugin, 1);
-    dm->plugin = p;
-    p->priv = dm;
+    GtkWidget * p;
+    const char *str;
 
     /* Load parameters from the configuration file. */
-    line s;
-    s.len = 256;
-    if (fp != NULL)
-    {
-        while (lxpanel_get_line(fp, &s) != LINE_BLOCK_END)
-        {
-            if (s.type == LINE_NONE)
-            {
-                ERR( "dirmenu: illegal token %s\n", s.str);
-                return 0;
-            }
-            if (s.type == LINE_VAR)
-            {
-                if (g_ascii_strcasecmp(s.t[0], "image") == 0)
-                    dm->image = g_strdup(s.t[1]);
-                else if (g_ascii_strcasecmp(s.t[0], "path") == 0)
-                    dm->path = g_strdup(s.t[1]);
-               else if (g_ascii_strcasecmp(s.t[0], "name") == 0)
-                    dm->name = g_strdup( s.t[1] );
-                else
-                    ERR( "dirmenu: unknown var %s\n", s.t[0]);
-            }
-            else
-            {
-                ERR( "dirmenu: illegal in this context %s\n", s.str);
-                return 0;
-            }
-        }
-    }
+    if (config_setting_lookup_string(settings, "image", &str))
+        dm->image = g_strdup(str);
+    if (config_setting_lookup_string(settings, "path", &str))
+        dm->path = g_strdup(str);
+    if (config_setting_lookup_string(settings, "name", &str))
+        dm->name = g_strdup(str);
+
+    /* Save construction pointers */
+    dm->panel = panel;
+    dm->settings = settings;
 
     /* Allocate top level widget and set into Plugin widget pointer.
      * It is not known why, but the button text will not draw if it is edited from empty to non-empty
      * unless this strategy of initializing it with a non-empty value first is followed. */
-    p->pwid = fb_button_new_from_file_with_label(
-        ((dm->image != NULL) ? dm->image : "file-manager"),
-        p->panel->icon_size, p->panel->icon_size, PANEL_ICON_HIGHLIGHT, TRUE, p->panel, "Temp");
-    gtk_container_set_border_width(GTK_CONTAINER(p->pwid), 0);
-    g_signal_connect(p->pwid, "button-press-event", G_CALLBACK(dirmenu_button_press_event), p);
+    p = lxpanel_button_new_for_icon(panel,
+                            ((dm->image != NULL) ? dm->image : "file-manager"),
+                            NULL, "Temp");
+    lxpanel_plugin_set_data(p, dm, dirmenu_destructor);
+    gtk_container_set_border_width(GTK_CONTAINER(p), 0);
 
     /* Initialize the widget. */
     dirmenu_apply_configuration(p);
 
     /* Show the widget and return. */
-    gtk_widget_show(p->pwid);
-    return 1;
+    return p;
 }
 
 /* Plugin destructor. */
-static void dirmenu_destructor(Plugin * p)
+static void dirmenu_destructor(gpointer user_data)
 {
-    DirMenuPlugin * dm = (DirMenuPlugin *) p->priv;
+    DirMenuPlugin * dm = (DirMenuPlugin *)user_data;
 
     /* Release a reference on the folder icon if held. */
     if (dm->folder_icon)
@@ -369,38 +345,48 @@ static void dirmenu_destructor(Plugin * p)
 static void dirmenu_apply_configuration_to_children(GtkWidget * w, DirMenuPlugin * dm)
 {
     if (GTK_IS_CONTAINER(w))
-       gtk_container_foreach(GTK_CONTAINER(w), (GtkCallback) dirmenu_apply_configuration_to_children, (gpointer) dm);
+        gtk_container_foreach(GTK_CONTAINER(w), (GtkCallback) dirmenu_apply_configuration_to_children, (gpointer) dm);
     else if (GTK_IS_LABEL(w))
     {
         if (dm->name == NULL)
-           gtk_label_set_text(GTK_LABEL(w), NULL);
+            gtk_label_set_text(GTK_LABEL(w), NULL);
         else
-            panel_draw_label_text(dm->plugin->panel, w, dm->name, FALSE, 1, TRUE);
+            panel_draw_label_text(dm->panel, w, dm->name, FALSE, 1, TRUE);
     }
 }
 
 /* Callback when the configuration dialog has recorded a configuration change. */
-static void dirmenu_apply_configuration(Plugin * p)
+static gboolean dirmenu_apply_configuration(gpointer user_data)
 {
-    DirMenuPlugin * dm = (DirMenuPlugin *) p->priv;
-
-    fb_button_set_from_file(p->pwid,
-        ((dm->image != NULL) ? dm->image : "file-manager"),
-        ((dm->image != NULL) ? -1 : p->panel->icon_size), p->panel->icon_size, TRUE);
-
-    gtk_widget_set_tooltip_text(p->pwid, ((dm->path != NULL) ? expand_tilda(dm->path) : g_get_home_dir()));
-    gtk_container_foreach(GTK_CONTAINER(p->pwid), (GtkCallback) dirmenu_apply_configuration_to_children, (gpointer) dm);
+    GtkWidget * p = user_data;
+    DirMenuPlugin * dm = lxpanel_plugin_get_data(p);
+
+    /* Save configuration */
+    config_setting_set_string(config_setting_add(dm->settings, "path",
+                                                 PANEL_CONF_TYPE_STRING),
+                              dm->path);
+    config_setting_set_string(config_setting_add(dm->settings, "name",
+                                                 PANEL_CONF_TYPE_STRING),
+                              dm->name);
+    config_setting_set_string(config_setting_add(dm->settings, "image",
+                                                 PANEL_CONF_TYPE_STRING),
+                              dm->image);
+
+    lxpanel_button_set_icon(p, ((dm->image != NULL) ? dm->image : "file-manager"),
+                            panel_get_icon_size(dm->panel));
+
+    /* FIXME: memory leak is here! */
+    gtk_widget_set_tooltip_text(p, ((dm->path != NULL) ? expand_tilda(dm->path) : g_get_home_dir()));
+    gtk_container_foreach(GTK_CONTAINER(p), (GtkCallback) dirmenu_apply_configuration_to_children, (gpointer) dm);
+    return FALSE;
 }
 
 /* Callback when the configuration dialog is to be shown. */
-static void dirmenu_configure(Plugin * p, GtkWindow * parent)
+static void dirmenu_configure(Panel *panel, GtkWidget *p, GtkWindow *parent)
 {
-
-    DirMenuPlugin * dm = (DirMenuPlugin *) p->priv;
-    GtkWidget * dlg = create_generic_config_dlg(
-        _(p->class->name),
-        GTK_WIDGET(parent),
-        (GSourceFunc) dirmenu_apply_configuration, (gpointer) p,
+    DirMenuPlugin * dm = lxpanel_plugin_get_data(p);
+    GtkWidget * dlg = lxpanel_generic_config_dlg(_("Directory Menu"),
+        panel, dirmenu_apply_configuration, p,
         _("Directory"), &dm->path, CONF_TYPE_DIRECTORY_ENTRY,
         _("Label"), &dm->name, CONF_TYPE_STR,
         _("Icon"), &dm->image, CONF_TYPE_FILE_ENTRY,
@@ -408,39 +394,19 @@ static void dirmenu_configure(Plugin * p, GtkWindow * parent)
     gtk_window_present(GTK_WINDOW(dlg));
 }
 
-/* Callback when the configuration is to be saved. */
-static void dirmenu_save_configuration(Plugin * p, FILE * fp)
-{
-    DirMenuPlugin * dm = (DirMenuPlugin *) p->priv;
-    lxpanel_put_str(fp, "path", dm->path);
-    lxpanel_put_str(fp, "name", dm->name);
-    lxpanel_put_str(fp, "image", dm->image);
-}
-
 /* Callback when panel configuration changes. */
-static void dirmenu_panel_configuration_changed(Plugin * p)
+static void dirmenu_panel_configuration_changed(Panel *panel, GtkWidget *p)
 {
-    DirMenuPlugin * dm = (DirMenuPlugin *) p->priv;
-    fb_button_set_from_file(p->pwid,
-        ((dm->image != NULL) ? dm->image : "file-manager"),
-        p->panel->icon_size, p->panel->icon_size, TRUE);
     dirmenu_apply_configuration(p);
 }
 
 /* Plugin descriptor. */
-PluginClass dirmenu_plugin_class = {
-
-    PLUGINCLASS_VERSIONING,
-
-    .type = "dirmenu",
+LXPanelPluginInit lxpanel_static_plugin_dirmenu = {
     .name = N_("Directory Menu"),
-    .version = "1.0",
     .description = N_("Browse directory tree via menu (Author = PCMan)"),
 
-    .constructor = dirmenu_constructor,
-    .destructor  = dirmenu_destructor,
+    .new_instance = dirmenu_constructor,
     .config = dirmenu_configure,
-    .save = dirmenu_save_configuration,
-    .panel_configuration_changed = dirmenu_panel_configuration_changed
-
+    .reconfigure = dirmenu_panel_configuration_changed,
+    .button_press_event = dirmenu_button_press_event
 };
index da9701e..5bb491a 100644 (file)
@@ -129,6 +129,9 @@ struct _Panel {
     GtkWidget* alignment_right_label;  /* Label of alignment: right control */
     GtkWidget* height_control;         /* Height control in preference dialog */
     GtkWidget* width_control;          /* Width control in preference dialog */
+
+    //gint dyn_space;                     /* Space for expandable plugins */
+    //guint calculate_size_idle;          /* The idle handler for dyn_space calc */
 };
 
 typedef struct {
@@ -160,6 +163,8 @@ const gchar *num2str(pair *p, int num, const gchar *defval);
 
 char* get_config_file( const char* profile, const char* file_name, gboolean is_global );
 
+//void _queue_panel_calculate_size(Panel *panel);
+
 /* FIXME: optional definitions */
 #define STATIC_SEPARATOR
 #define STATIC_LAUNCHBAR