[maemo-commits] [maemo-commits] r9356 - in projects/haf/branches/maemo-af-desktop/hildon-desktop: . libhildondesktop src

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Thu Jan 25 19:36:40 EET 2007
Author: jobi
Date: 2007-01-25 19:36:39 +0200 (Thu, 25 Jan 2007)
New Revision: 9356

Modified:
   projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/statusbar-item.c
   projects/haf/branches/maemo-af-desktop/hildon-desktop/src/Makefile.am
   projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-config.h
   projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-legacy.c
Log:

2007-01-25  Johan Bilien  <johan.bilien at nokia.com>

	* libhildondesktop/statusbar-item.c: Made non-abstract
	* src/hd-plugin-loader-legacy.c: Added support for
	legacy statusbar plugins (not tested nor fully functional).



Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog	2007-01-25 16:58:40 UTC (rev 9355)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog	2007-01-25 17:36:39 UTC (rev 9356)
@@ -1,3 +1,9 @@
+2007-01-25  Johan Bilien  <johan.bilien at nokia.com>
+
+	* libhildondesktop/statusbar-item.c: Made non-abstract
+	* src/hd-plugin-loader-legacy.c: Added support for
+	legacy statusbar plugins (not tested nor fully functional).
+
 2007-01-24  Moises Martinez  <moises.martinez at nokia.com>
 
 	* libhildondesktop/hildon-desktop-panel-window-dialog.c:

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/statusbar-item.c
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/statusbar-item.c	2007-01-25 16:58:40 UTC (rev 9355)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/statusbar-item.c	2007-01-25 17:36:39 UTC (rev 9356)
@@ -72,7 +72,7 @@
         item_type = g_type_register_static ( HILDON_DESKTOP_TYPE_PANEL_ITEM,
                                              "StatusbarItem",
                                              &item_info,
-                                             G_TYPE_FLAG_ABSTRACT );
+                                             0);
     }
     
     return item_type;

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/Makefile.am
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/Makefile.am	2007-01-25 16:58:40 UTC (rev 9355)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/Makefile.am	2007-01-25 17:36:39 UTC (rev 9356)
@@ -22,6 +22,7 @@
 	-DHD_DESKTOP_BACKGROUNDS_PATH=\"$(hildondesktopbackgroundsdir)\"   \
 	-DHD_PLUGIN_LOADER_MODULES_PATH=\"$(hildonpluginloaderlibdir)\"    \
 	-DHD_PLUGIN_LOADER_LEGACY_HOME_MODULE_PATH=\"$(hildonhomelibdir)\" \
+	-DHD_PLUGIN_LOADER_LEGACY_STATUSBAR_MODULE_PATH=\"$(hildonstatusbarlibdir)\" \
 	-DHD_PLUGIN_LOADER_LEGACY_NAVIGATOR_MODULE_PATH=\"$(hildonnavigatorlibdir)\"
 
 hildon_desktop_LDFLAGS  = \

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-config.h
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-config.h	2007-01-25 16:58:40 UTC (rev 9355)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-config.h	2007-01-25 17:36:39 UTC (rev 9356)
@@ -37,6 +37,7 @@
 #define HD_CONTAINER_TYPE_HOME              "home"
 #define HD_CONTAINER_TYPE_PANEL_FIXED       "panel_fixed"
 #define HD_CONTAINER_TYPE_PANEL_BOX         "panel_box"
+#define HD_CONTAINER_TYPE_PANEL_SLIDER      "panel_slider"
 
 #define HD_WINDOW_ORIENTATION_TOP           "top"
 #define HD_WINDOW_ORIENTATION_BOTTOM        "bottom"
@@ -55,4 +56,6 @@
 
 #define HD_PLUGIN_CONFIG_KEY_TN             "X-task-navigator-plugin"
 
+#define HD_PLUGIN_CONFIG_KEY_SB             "X-status-bar-plugin"
+
 #endif /* __HD_CONFIG_FILES_H__ */

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-legacy.c
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-legacy.c	2007-01-25 16:58:40 UTC (rev 9355)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-legacy.c	2007-01-25 17:36:39 UTC (rev 9356)
@@ -47,7 +47,7 @@
 {
   HD_PLUGIN_LOADER_LEGACY_TYPE_UNKNOWN = 0,
   HD_PLUGIN_LOADER_LEGACY_TYPE_HOME,
-  HD_PLUGIN_LOADER_LEGACY_TYPE_STATUS_BAR,
+  HD_PLUGIN_LOADER_LEGACY_TYPE_STATUSBAR,
   HD_PLUGIN_LOADER_LEGACY_TYPE_NAVIGATOR
 } HDPluginLoaderLegacyType;
 
@@ -123,6 +123,10 @@
 static GtkWidget *
 hd_plugin_loader_legacy_navigator_init (HDPluginLoaderLegacy *loader,
                                         GError **error);
+
+static GtkWidget *
+hd_plugin_loader_legacy_status_bar_init (HDPluginLoaderLegacy *loader,
+                                         GError **error);
   
 static void
 hd_plugin_loader_legacy_connect_signals (HDPluginLoaderLegacy *loader,
@@ -199,6 +203,13 @@
         priv->library_key = HD_PLUGIN_CONFIG_KEY_TN;
         priv->module_dir = HD_PLUGIN_LOADER_LEGACY_NAVIGATOR_MODULE_PATH;
         break;
+    
+    case HD_PLUGIN_LOADER_LEGACY_TYPE_STATUSBAR:
+        priv->symbol_mapping = NULL;
+        priv->init_func = hd_plugin_loader_legacy_status_bar_init;
+        priv->library_key = HD_PLUGIN_CONFIG_KEY_SB;
+        priv->module_dir = HD_PLUGIN_LOADER_LEGACY_STATUSBAR_MODULE_PATH;
+        break;
 
     default:
         g_set_error (error,
@@ -219,9 +230,10 @@
   if (local_error) goto error;
 
   /* Now connect all the callbacks to the proper signals */
-  hd_plugin_loader_legacy_connect_signals (HD_PLUGIN_LOADER_LEGACY (loader),
-                                           item,
-                                           &local_error);
+  if (priv->symbol_mapping)
+    hd_plugin_loader_legacy_connect_signals (HD_PLUGIN_LOADER_LEGACY (loader),
+                                             item,
+                                             &local_error);
   if (local_error) goto error;
 
   return g_list_append (NULL, item);
@@ -317,8 +329,6 @@
 
     g_module_symbol (priv->module, mapping->symbol_name, &symbol);
 
-    fprintf (stderr, "Found symbol %s, connecting to %s\n", mapping->symbol_name, mapping->signal );
-
     if (symbol)
       g_signal_connect_swapped (G_OBJECT (item),
                                 mapping->signal,
@@ -368,6 +378,19 @@
     g_free (value);
     return;
   }
+
+  /* Check for the X-task-navigator-plugin = field */
+  value = g_key_file_get_string (keyfile,
+                                 HD_PLUGIN_CONFIG_GROUP,
+                                 HD_PLUGIN_CONFIG_KEY_SB,
+                                 NULL);
+
+  if (value)
+  {
+    priv->plugin_type = HD_PLUGIN_LOADER_LEGACY_TYPE_STATUSBAR;
+    g_free (value);
+    return;
+  }
 }
 
 static GtkWidget *
@@ -555,3 +578,110 @@
 
   return item;
 }
+
+static GtkWidget *
+hd_plugin_loader_legacy_status_bar_init (HDPluginLoaderLegacy *loader,
+                                         GError **error)
+{
+  typedef void *(*SBInitialize)     (GtkWidget *item,
+                                     GtkWidget **button);
+  typedef void (*SBDestroy)         (void *data);
+  typedef void (*SBUpdate)          (void *data,
+                                     gint value1, 
+                                     gint value2,
+                                     const gchar *str);
+
+  typedef int  (*SBGetPriority)     (void *data);
+  typedef void (*SBSetConditional)  (void *data, gboolean cond);
+
+  struct SBSymbols
+    {
+      SBInitialize      initialize;
+      SBDestroy         destroy;
+      SBUpdate          update;
+      SBGetPriority     get_priority;
+      SBSetConditional  set_conditional;
+    };
+  
+  typedef void (*SBEntry) (struct SBSymbols *symbols);
+
+  HDPluginLoaderLegacyPrivate *priv;
+  GtkWidget        *item;
+  gpointer          symbol = NULL;
+  gchar            *lib_name;
+  gchar            *stripped;
+  gchar            *entry_name;
+  GKeyFile         *keyfile;
+  struct SBSymbols symbols;
+  gpointer          module_data;
+  GtkWidget        *module_widget;
+  GError           *local_error = NULL;
+  
+  priv = HD_PLUGIN_LOADER_LEGACY_GET_PRIVATE (loader);
+  
+
+  keyfile = hd_plugin_loader_get_key_file (HD_PLUGIN_LOADER (loader));
+  
+  lib_name = g_key_file_get_string (keyfile,
+                                    HD_PLUGIN_CONFIG_GROUP,
+                                    priv->library_key,
+                                    &local_error);
+
+  if (local_error)
+    {
+      g_propagate_error (error, local_error);
+      return NULL;
+    }
+
+  /* Derive the plugin name from it's library file ... */
+  stripped = g_strndup (lib_name + 3, strlen (lib_name) - 6);
+  entry_name = g_strdup_printf ("%s_entry", stripped);
+
+  g_module_symbol (priv->module, entry_name, &symbol);
+
+  g_free (lib_name);
+  g_free (stripped);
+  g_free (entry_name);
+
+  if (!symbol)
+  {
+    g_set_error (error,
+                 hd_plugin_loader_error_quark (),
+                 HD_PLUGIN_LOADER_ERROR_SYMBOL,
+                 g_module_error ());
+    return NULL;
+  }
+
+  ((SBEntry)symbol) (&symbols);
+
+  if (!symbols.initialize || !symbols.destroy)
+    {
+      g_set_error (error,
+                   hd_plugin_loader_error_quark (),
+                   HD_PLUGIN_LOADER_ERROR_SYMBOL,
+                   "Initialize or Destroy symbols are missing");
+      return NULL;
+    }
+
+  item = g_object_new (STATUSBAR_TYPE_ITEM, NULL);
+
+  module_data = symbols.initialize (item, &module_widget);
+
+  if (module_widget)
+    {
+      /* FIXME */
+      gtk_widget_set_size_request (module_widget, 40, 40);
+      gtk_widget_show_all (module_widget);
+
+      gtk_container_add (GTK_CONTAINER (item), module_widget);
+    }
+
+  g_signal_connect_swapped (item, "destroy",
+                            G_CALLBACK (symbols.destroy),
+                            module_data);
+
+
+
+  return item;
+
+}


More information about the maemo-commits mailing list