Remove ability to build netstat plugin from configure
authormartyj19 <martyj19@comcast.net>
Mon, 13 Jul 2009 02:08:06 +0000 (02:08 +0000)
committermartyj19 <martyj19@comcast.net>
Mon, 13 Jul 2009 02:08:06 +0000 (02:08 +0000)
Change graphic presentation of add button in initial launchbar
Support RTL locales in icon grid

configure.ac
src/icon-grid.c
src/plugins/launchbar.c
src/plugins/tray.c

index 0271961..2f63c3e 100644 (file)
@@ -133,21 +133,6 @@ AM_CONDITIONAL(BUILD_ALSA_PLUGINS, test x$compile_alsa = xyes)
 dnl FIXME: check OSS existence
 AM_CONDITIONAL(BUILD_OSS_PLUGINS, test x$compile_alsa = xno)
 
-# check libiw for netstat plugin
-AC_ARG_ENABLE([libiw],
-    AS_HELP_STRING([--disable-libiw],
-                    [compile libiw-based netstat plugin (default: disable)]),
-            compile_libiw=$enableval, compile_libiw="no")
-if test x"$compile_libiw" = "xyes"; then
-    AC_CHECK_HEADERS(iwlib.h,
-                     [AC_CHECK_LIB(iw,
-                                   iw_sockets_open,
-                                   compile_libiw=yes,
-                                   compile_libiw=no)],
-                                   compile_libiw=no)
-fi
-AM_CONDITIONAL(BUILD_LIBIW_PLUGINS, test x$compile_libiw = xyes)
-
 AC_ARG_ENABLE([plugins-loading],
     AS_HELP_STRING([--disable-plugins-loading],
                [disable plugin loading (default: enable)]),
@@ -161,7 +146,6 @@ fi
 
 dnl Here are plugin listing.
 plugin_netstatus=
-plugin_netstat=
 plugin_volume=
 plugin_volumealsa=
 plugin_cpu=
@@ -177,7 +161,7 @@ AC_ARG_WITH(plugins,
 [                         plugins may be comma separated ]
 [                         'all' builds all plugins (default), 'none' builds none ]
 [                         Possible plugins are: ]
-[                         netstatus, netstat, volume, volumealsa, cpu, deskno, batt, kbled, xkb, thermal], plugins="$withval",[plugins="all"])
+[                         netstatus, volume, volumealsa, cpu, deskno, batt, kbled, xkb, thermal], plugins="$withval",[plugins="all"])
 
 if test x"$plugins" != xall -a x"$plugins" != xnone; then
     if test x"$plugins_loading" = xno; then
@@ -186,7 +170,7 @@ if test x"$plugins" != xall -a x"$plugins" != xnone; then
     fi
 fi
 
-ALL_PLUGINS_LIST="netstatus netstat volume volumealsa cpu deskno batt kbled xkb thermal"
+ALL_PLUGINS_LIST="netstatus volume volumealsa cpu deskno batt kbled xkb thermal"
 AC_SUBST(ALL_PLUGINS_LIST)
 
 if test x"$plugins" = xall; then
@@ -196,7 +180,6 @@ dnl        export plugin_$name="$name"
 dnl    done
 
     plugin_netstatus=netstatus
-    plugin_netstat=
     plugin_volume=volume
     plugin_volumealsa=volumealsa
     plugin_cpu=cpu
@@ -216,9 +199,6 @@ else
             netstatus)
                 plugin_netstatus=netstatus
                 ;;
-            netstat)
-                plugin_netstat=netstat
-                ;;
             volume)
                 plugin_volume=volume
                 ;;
@@ -263,15 +243,8 @@ else
     dnl force OSS plugin to <null>
     plugin_volume=
 fi
-if test x"$compile_libiw" = "xno"; then
-   if test ! -z $plugin_netstat; then
-       AC_MSG_RESULT([no libiw headers/libraries found!])
-   fi
-   plugin_netstat=
-fi
 PLUGINS_LIST="\
     $plugin_netstatus \
-    $plugin_netstat \
     $plugin_volume \
     $plugin_volumealsa \
     $plugin_cpu \
@@ -334,7 +307,6 @@ AC_CONFIG_FILES([
     src/Makefile
     src/plugins/Makefile
     src/plugins/netstatus/Makefile
-    src/plugins/netstat/Makefile
     src/plugins/volume/Makefile
     src/plugins/volumealsa/Makefile
     src/plugins/cpu/Makefile
@@ -359,9 +331,6 @@ echo Building dynamic plugins:
     if test x"$plugin_netstatus" != x; then
         AC_MSG_RESULT([    netstatus - Monitor networking status])
     fi
-    if test x"$plugin_netstat" != x; then
-        AC_MSG_RESULT([    netstat - Monitor networking status (Linux Only)])
-    fi
     if test x"$plugin_volume" != x; then
         AC_MSG_RESULT([    volume - Display and adjust volume of sound card for OSS])
     fi
index 3779dab..4d41329 100644 (file)
@@ -65,11 +65,17 @@ static gboolean icon_grid_placement(IconGrid * ig)
     }
 
     /* Reposition each visible child. */
-    int x = ig->border;
-    int y = ig->border;
+    GtkTextDirection direction = gtk_widget_get_direction(ig->container);
     int limit = ig->border + ((ig->orientation == GTK_ORIENTATION_HORIZONTAL)
         ?  (ig->rows * (child_height + ig->spacing))
         :  (ig->columns * (child_width + ig->spacing)));
+    int x_initial = ((direction == GTK_TEXT_DIR_RTL)
+        ? ig->widget->allocation.width - child_width - ig->border
+        : ig->border);
+    int x_delta = child_width + ig->spacing;
+    if (direction == GTK_TEXT_DIR_RTL) x_delta = - x_delta;
+    int x = x_initial;
+    int y = ig->border;
     IconGridElement * ige;
     for (ige = ig->child_list; ige != NULL; ige = ige->flink)
     {
@@ -97,15 +103,15 @@ static gboolean icon_grid_placement(IconGrid * ig)
                 if (y >= limit)
                 {
                     y = ig->border;
-                    x += child_width + ig->spacing;
+                    x += x_delta;
                 }
             }
             else
             {
-                x += child_width + ig->spacing;
-                if (x >= limit)
+                x += x_delta;
+                if ((direction == GTK_TEXT_DIR_RTL) ? (x <= 0) : (x >= limit))
                 {
-                    x = ig->border;
+                    x = x_initial;
                     y += child_height + ig->spacing;
                 }
             }
@@ -415,7 +421,6 @@ void icon_grid_free(IconGrid * ig)
 
     /* Get the empty widget redrawn. */
     icon_grid_demand_resize(ig);
-    while (gtk_events_pending()) gtk_main_iteration();
 
     /* Free all memory. */
     while (ig->child_list != NULL)
index 5f47896..25e3339 100644 (file)
@@ -206,13 +206,23 @@ static void launchbutton_build_bootstrap(Plugin * p)
          * The "desktop-id" being NULL is the marker that this is the bootstrap button. */
         lb->bootstrap_button = g_new0(LaunchButton, 1);
         lb->bootstrap_button->plugin = p;
-        lb->bootstrap_button->widget = gtk_button_new();
-        gtk_button_set_image(GTK_BUTTON(lb->bootstrap_button->widget),
-            gtk_image_new_from_pixbuf(lxpanel_load_icon(GTK_STOCK_ADD, p->panel->icon_size, p->panel->icon_size, FALSE)));
-        g_signal_connect(lb->bootstrap_button->widget, "button-press-event", G_CALLBACK(launchbutton_press_event), lb->bootstrap_button);
+
+        /* Create an event box. */
+        GtkWidget * event_box = gtk_event_box_new();
+        gtk_container_set_border_width(GTK_CONTAINER(event_box), 0);
+        GTK_WIDGET_UNSET_FLAGS(event_box, GTK_CAN_FOCUS);
+        lb->bootstrap_button->widget = event_box;
+        g_signal_connect(event_box, "button-press-event", G_CALLBACK(launchbutton_press_event), lb->bootstrap_button);
+
+        /* Create an image containing the stock "Add" icon as a child of the event box. */
+        GtkWidget * image = gtk_image_new_from_pixbuf(
+            lxpanel_load_icon(GTK_STOCK_ADD, p->panel->icon_size, p->panel->icon_size, FALSE));
+        gtk_misc_set_padding(GTK_MISC(image), 0, 0);
+        gtk_misc_set_alignment(GTK_MISC(image), 0, 0);
+        gtk_container_add(GTK_CONTAINER(event_box), image);
 
         /* Add the bootstrap button to the icon grid.  By policy it is empty at this point. */
-        icon_grid_add(lb->icon_grid, lb->bootstrap_button->widget, TRUE); 
+        icon_grid_add(lb->icon_grid, event_box, TRUE); 
     }
     else
         icon_grid_set_visible(lb->icon_grid, lb->bootstrap_button->widget, TRUE);
@@ -436,12 +446,19 @@ static void launchbar_destructor(Plugin * p)
 {
     LaunchbarPlugin * lb = (LaunchbarPlugin *) p->priv;
 
+    /* Free the launchbar. */
     g_slist_foreach(lb->buttons, (GFunc) launchbutton_free, NULL);
     icon_grid_free(lb->icon_grid);
+
+    /* Free the bootstrap button if it exists. */
     if (lb->bootstrap_button != NULL)
-        {
         g_free(lb->bootstrap_button);
-        }
+
+    /* Ensure that the configuration dialog is dismissed. */
+    if (lb->config_dlg != NULL)
+        gtk_widget_destroy(lb->config_dlg);
+
+    /* Deallocate all memory. */
     g_free(lb);
 }
 
index 51ba965..907263c 100644 (file)
@@ -108,7 +108,11 @@ static int tray_constructor(Plugin * p, char ** fp);
 static void tray_destructor(Plugin * p);
 static void tray_panel_configuration_changed(Plugin * p);
 
-static TrayPlugin* tray_singleton = NULL;
+/* There is no way to remove the installed client message filters.
+ * Thus they reference the tray context through this static variable, which is set
+ * and cleared depending upon whether an instance of the system tray exists.
+ * If later GTK provides an API to remove them, this should be fixed. */
+static TrayPlugin * tray_singleton = NULL;
 
 /* Look up a client in the client list. */
 static TrayClient * client_lookup(TrayPlugin * tr, Window window)
@@ -335,18 +339,16 @@ static void balloon_message_remove(TrayPlugin * tr, Window window, gboolean all_
 /* Handle a balloon message _NET_SYSTEM_TRAY_MESSAGE_DATA event. */
 static GdkFilterReturn balloon_message_data_event(GdkXEvent * xev, GdkEvent * event, gpointer data)
 {
-    int len;
-    XClientMessageEvent * xevent  = (XClientMessageEvent *) xev;
+    /* Locate tray context via a static variable.  If there is no active tray plugin, ignore the event. */
     TrayPlugin * tr = tray_singleton;
+    if (tr == NULL)
+        return GDK_FILTER_CONTINUE;
+
     /* Look up the pending message in the list. */
+    int len;
+    XClientMessageEvent * xevent  = (XClientMessageEvent *) xev;
     BalloonMessage * msg_pred = NULL;
     BalloonMessage * msg;
-
-       /* this is dirty but inevitable since gdk client message filter 
-        * cannot be removed. */
-       if(!tr)
-               return GDK_FILTER_CONTINUE;
-
     for (msg = tr->incomplete_messages; msg != NULL; msg_pred = msg, msg = msg->flink)
     {
         if (xevent->window == msg->window)
@@ -537,15 +539,13 @@ static GdkFilterReturn tray_window_filter(GdkXEvent * xev, GdkEvent * event, gpo
 /* Filter for _NET_SYSTEM_TRAY_OPCODE (SYSTEM_TRAY_BEGIN_MESSAGE and SYSTEM_TRAY_CANCEL_MESSAGE). */
 static GdkFilterReturn tray_client_message_opcode_filter(GdkXEvent * xev, GdkEvent * event, gpointer data)
 {
-    XClientMessageEvent * xevent  = (XClientMessageEvent *) xev;
+    /* Locate tray context via a static variable.  If there is no active tray plugin, ignore the event. */
     TrayPlugin * tr = tray_singleton;
-
-       /* this is dirty but inevitable since gdk client message filter 
-        * cannot be removed. */
-       if(!tr)
-               return GDK_FILTER_CONTINUE;
+    if (tr == NULL)
+        return GDK_FILTER_CONTINUE;
 
     /* Dispatch on the message. */
+    XClientMessageEvent * xevent  = (XClientMessageEvent *) xev;
     switch (xevent->data.l[1])
     {
         case SYSTEM_TRAY_REQUEST_DOCK:
@@ -609,10 +609,11 @@ static int tray_constructor(Plugin * p, char ** fp)
         }
     }
 
-    /* Allocate plugin context and set into Plugin private data pointer. */
+    /* Allocate plugin context and set into Plugin private data pointer and static variable. */
     TrayPlugin * tr = g_new0(TrayPlugin, 1);
     p->priv = tr;
     tr->plugin = p;
+    tray_singleton = tr;
 
     /* Get the screen and display. */
     GdkScreen * screen = gtk_widget_get_screen(GTK_WIDGET(p->panel->topgwin));
@@ -673,9 +674,6 @@ static int tray_constructor(Plugin * p, char ** fp)
         /* Add GDK window filter to handle SYSTEM_TRAY_REQUEST_DOCK and SelectionClear. */
         gdk_window_add_filter(invisible->window, tray_window_filter, tr);
 
-        /* FIXME: There is no way to remove the installed client message filter.
-                *        If later gtk+ provide API to remove them, this should be fixed. */
-
         /* Add filter for _NET_SYSTEM_TRAY_OPCODE (SYSTEM_TRAY_BEGIN_MESSAGE and SYSTEM_TRAY_CANCEL_MESSAGE). */
         GdkAtom opcode_atom = gdk_atom_intern("_NET_SYSTEM_TRAY_OPCODE", FALSE);
         gdk_display_add_client_message_filter(display, opcode_atom, tray_client_message_opcode_filter, &tray_singleton);
@@ -684,10 +682,8 @@ static int tray_constructor(Plugin * p, char ** fp)
         GdkAtom message_data_atom = gdk_atom_intern("_NET_SYSTEM_TRAY_MESSAGE_DATA", FALSE);
         gdk_display_add_client_message_filter(display, message_data_atom, balloon_message_data_event, &tray_singleton);
 
+        /* Reference the window since it is never added to a container. */
         tr->invisible = invisible;
-               tray_singleton = tr;
-
-        /* FIXME: why this is needed? */
         g_object_ref(G_OBJECT(invisible));
     }
     else
@@ -736,12 +732,9 @@ static void tray_destructor(Plugin * p)
     /* Deallocate memory. */
     icon_grid_free(tr->icon_grid);
 
+    /* Ensure that the client message filters will discard events. */
+    tray_singleton = NULL;
     g_free(tr);
-
-       /* we should set this to NULL Otherwise invalid pointer
-        * will be referenced in client message filter since
-        * gdk client message filters unfortunately cannot be removed. */
-       tray_singleton = NULL;
 }
 
 /* Callback when panel configuration changes. */