antiright-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Antiright-devel] antiright ACE-desktop/ACE gtkshell/add_options....


From: Jeffrey Bedard
Subject: [Antiright-devel] antiright ACE-desktop/ACE gtkshell/add_options....
Date: Sun, 04 Mar 2007 23:11:05 +0000

CVSROOT:        /sources/antiright
Module name:    antiright
Changes by:     Jeffrey Bedard <jefbed> 07/03/04 23:11:04

Modified files:
        ACE-desktop    : ACE 
        gtkshell       : add_options.c arguments.c button.c 
                         image_button.c image_button.h row.c 

Log message:
        Added support for menu buttons, along with menu items with icons.
        Menus and items are specified as a "::" separated list.  Icons are
        specified after the command, separated by a comma.  Stock icons are
        used if a file name for an icon cannot be resolved, so the individual
        stock item addition option has been removed.  

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/antiright/ACE-desktop/ACE?cvsroot=antiright&r1=1.23&r2=1.24
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/add_options.c?cvsroot=antiright&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/arguments.c?cvsroot=antiright&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/button.c?cvsroot=antiright&r1=1.17&r2=1.18
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/image_button.c?cvsroot=antiright&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/image_button.h?cvsroot=antiright&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/row.c?cvsroot=antiright&r1=1.12&r2=1.13

Patches:
Index: ACE-desktop/ACE
===================================================================
RCS file: /sources/antiright/antiright/ACE-desktop/ACE,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -b -r1.23 -r1.24
--- ACE-desktop/ACE     4 Mar 2007 03:20:14 -0000       1.23
+++ ACE-desktop/ACE     4 Mar 2007 23:11:04 -0000       1.24
@@ -180,7 +180,7 @@
        CMD="$CMD -al '--------'"
        local FILE
        for FILE in *; do
-               CMD="$CMD -aS \"ACE -A ARO $FILE & # $FILE\" gtk-file"
+               CMD="$CMD -ai \"ACE -A ARO $FILE & # $FILE\" gtk-file"
        done
        CMD="$CMD 'exit # CLOSE'"
        CMD="$CMD \"cd .. ; $FM & # UP\""

Index: gtkshell/add_options.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/add_options.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- gtkshell/add_options.c      2 Mar 2007 16:41:43 -0000       1.13
+++ gtkshell/add_options.c      4 Mar 2007 23:11:04 -0000       1.14
@@ -91,9 +91,6 @@
        case 'r': /* Force creation of a new row.  */
                gsh_new_row(gsh);
                break;
-       case 'S': /* Add stock icon.  */
-               gsh_handle_add_stock_button(gsh, argc, argv, counter);
-               break;
        case 't':
                if (argc != *counter)
                        gsh_count(argc, counter);

Index: gtkshell/arguments.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/arguments.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- gtkshell/arguments.c        28 Feb 2007 03:53:51 -0000      1.7
+++ gtkshell/arguments.c        4 Mar 2007 23:11:04 -0000       1.8
@@ -22,6 +22,100 @@
 
 #include "gtkshell.h"
 
+#define SPLIT_ALL -1
+
+static void
+new_button(struct GSH * gsh, gchar * string)
+{
+       gchar **pair;
+
+       pair=g_strsplit(string, ",", 2);
+
+       if(ARPBOOL(pair[0]) && ARPBOOL(pair[1]))
+               gsh_image_button(gsh, pair[0], pair[1]);
+       else
+               gsh_command_button(gsh, pair[0]);
+
+       g_strfreev(pair);
+
+       gsh->rows.row--;
+}
+static void
+activate_cb(GtkWidget * widget, gpointer data)
+{
+       const gchar * command;
+       command=(const gchar *)data;
+       ARBUG((gchar *)command);
+       antiright_system((char *)command);
+}
+static void
+menuitem_parse(struct GSH * gsh, gchar * string)
+{
+       gchar **pair;
+       GtkWidget * item;
+       gchar * command;
+
+       pair=g_strsplit(string, ",", 2);
+
+       ARBUG(pair[0]);
+       ar_asprintf(&command, "%s", pair[0]);
+
+/*     item=gtk_menu_item_new_with_label(command);
+       gtk_menu_shell_append(GTK_MENU_SHELL(gsh->rows.v), item);
+       g_signal_connect(item, "activate", G_CALLBACK(activate_cb), command);
+       gtk_widget_show(item); */
+
+       if(ARPBOOL(pair[0]) && ARPBOOL(pair[1]))
+               gsh_image_button(gsh, command, pair[1]);
+       else
+               gsh_command_button(gsh, command);
+
+       g_strfreev(pair);
+}
+
+static gint
+popup_handler(GtkWidget * widget, GdkEvent * event)
+{
+       GdkEventButton *event_button;
+
+       event_button=(GdkEventButton *)event;
+       gtk_menu_popup(GTK_MENU(widget), NULL, NULL, NULL, NULL, 
+               event_button->button, event_button->time);
+       return TRUE;
+}
+
+static void
+button_parse(struct GSH * gsh, const gchar * string)
+{
+       gchar **tokens;
+       gint i;
+
+       tokens=g_strsplit(string, "::", SPLIT_ALL);
+       if(ARPBOOL(tokens[1]))
+       {
+               GtkWidget * oldrow;
+               GtkWidget * button;
+               oldrow=gsh->rows.v;
+               /* Set gsh->rows.v to a row within a menu.
+                * Create the menu before overwriting, then
+                * set back at end.  */
+               new_button(gsh, tokens[0]);
+               gsh->rows.v=gtk_menu_new(); 
+               gtk_widget_show(gsh->rows.v);
+               g_signal_connect_swapped(gsh->button, "clicked",
+                       G_CALLBACK(popup_handler), gsh->rows.v);
+
+               for(i=1; ARPBOOL(tokens[i]); i++)
+                       menuitem_parse(gsh, tokens[i]);
+
+               gsh->rows.v=oldrow;
+       }
+       else
+               gsh_command_button(gsh, tokens[0]);
+
+       g_strfreev(tokens);
+}
+
 void
 gsh_parse_arguments(struct GSH * gsh, int argc, char **argv)
 {
@@ -31,5 +125,5 @@
                if (argv[counter][0] == '-')
                        gsh_handle_switch_arguments(gsh, argc, argv, &counter);
                else
-                       gsh_command_button(gsh, argv[counter]);
+                       button_parse(gsh, argv[counter]);
 }

Index: gtkshell/button.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/button.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- gtkshell/button.c   2 Mar 2007 19:12:00 -0000       1.17
+++ gtkshell/button.c   4 Mar 2007 23:11:04 -0000       1.18
@@ -23,7 +23,7 @@
 #include "gtkshell.h"
 
 static void
-     setup_label(GtkWidget *widget, char *command);
+setup_label(GtkWidget *widget, char *command);
 
 static void
 setup_label(GtkWidget *widget, char *command)
@@ -31,6 +31,14 @@
        gchar *formatted;
 
        formatted = antiright_beautified_label(command);
+       if(GTK_IS_MENU_ITEM(widget))
+       {
+               GtkWidget * label;
+               label = gtk_label_new(formatted);
+               gtk_container_add(GTK_CONTAINER(widget), label);
+               gtk_widget_show(label);
+       }
+       else
        gtk_button_set_label(GTK_BUTTON(widget), formatted);
        free(formatted);
 }
@@ -43,8 +51,12 @@
 
        ARPASSERT(gsh);
 
-       
+       if(!GTK_IS_MENU(gsh->rows.v))
        gsh->button = gtk_button_new();
+       else
+               gsh->button = gtk_menu_item_new();
+
+       gtk_widget_show(gsh->button);
 
        setup_label(gsh->button, command);
 
@@ -60,9 +72,18 @@
                cb->data = command;     /* command from argv, literal, or
                                         * preallocated.  */
 
+               if(GTK_IS_MENU_ITEM(gsh->button))
+               {
+                       (void) g_signal_connect(G_OBJECT(gsh->button), 
+                               "activate", G_CALLBACK(system_cb), cb);
+
+               }
+               else
+               {
                /* @null@ */
-               (void) g_signal_connect(G_OBJECT(gsh->button), "clicked",
-                               G_CALLBACK(system_cb), cb);
+                       (void) g_signal_connect(G_OBJECT(gsh->button), 
+                               "clicked", G_CALLBACK(system_cb), cb);
+               }
 
        }
 

Index: gtkshell/image_button.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/image_button.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- gtkshell/image_button.c     2 Mar 2007 15:44:05 -0000       1.3
+++ gtkshell/image_button.c     4 Mar 2007 23:11:04 -0000       1.4
@@ -28,26 +28,42 @@
                     GtkWidget * image)
 {
        gsh_command_button(gsh, command);
+       if(!GTK_IS_MENU(gsh->rows.v))
+       {
        gtk_button_set_image(GTK_BUTTON(gsh->button), image);
        gtk_button_set_relief(GTK_BUTTON(gsh->button), GTK_RELIEF_NONE);
+       }
+       else
+       {
+               GtkWidget * label;
+               GtkWidget * hrow;
+               label=gtk_bin_get_child(GTK_BIN(gsh->button));
+               gtk_widget_ref(label);
+               gtk_container_remove(GTK_CONTAINER(gsh->button), label);
+               hrow=gtk_hbox_new(FALSE, 2);
+               gtk_container_add(GTK_CONTAINER(gsh->button), hrow);
+               gtk_widget_show(hrow);
+               gtk_container_add(GTK_CONTAINER(hrow), image);
+               gtk_widget_show(image);
+               gtk_container_add(GTK_CONTAINER(hrow), label);
+               gtk_widget_show(label);
+       }
 }
 
 void
-gsh_stock_image_button(struct GSH * gsh, char *command, char *stock_id)
+gsh_image_button(struct GSH * gsh, char *command, char *name)
 {
        GtkWidget *image;
+       gboolean is_file;
 
-       image=gtk_image_new_from_stock((const gchar *)stock_id,
-                                      GTK_ICON_SIZE_DND);
-       generic_image_button(gsh, command, image);
-}
+       is_file = g_file_test(name, G_FILE_TEST_EXISTS);
 
-void
-gsh_image_button(struct GSH * gsh, char *command, char *filename)
-{
-       GtkWidget *image;
+       ARIFB(is_file)
+               image = gtk_image_new_from_file(name);
+       else
+               image = gtk_image_new_from_stock((const gchar *)name,
+                       GTK_ICON_SIZE_DND);
 
-       image = gtk_image_new_from_file(filename);
        generic_image_button(gsh, command, image);
 }
 
@@ -68,13 +84,6 @@
 }
 
 void
-gsh_handle_add_stock_button(struct GSH * gsh, int argc, char **argv, 
-                           int * counter)
-{
-       generic_add(gsh, argc, argv, counter, &gsh_stock_image_button);
-}
-
-void
 gsh_handle_add_unlabeled_image_button(struct GSH * gsh, int argc, 
                                      char **argv, int *counter)
 {

Index: gtkshell/image_button.h
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/image_button.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- gtkshell/image_button.h     2 Mar 2007 19:12:00 -0000       1.3
+++ gtkshell/image_button.h     4 Mar 2007 23:11:04 -0000       1.4
@@ -24,7 +24,7 @@
 #define GSH_IMAGE_BUTTON_H
 
 void
-gsh_image_button(struct GSH * gsh, char *command, char *filename);
+gsh_image_button(struct GSH * gsh, char *command, char *name);
 
 void
 gsh_handle_add_image_button(struct GSH * gsh, int argc, 
@@ -33,15 +33,5 @@
 void
 gsh_handle_add_unlabeled_image_button(struct GSH * gsh, int argc, 
                                      char **argv, int *counter);
-
-void
-gsh_stock_image_button(struct GSH * gsh, char *command, 
-                      char *stock_id);
-
-void
-gsh_handle_add_stock_button(struct GSH * gsh, int argc, char **argv, 
-                           int * counter);
-
-
 #endif /* GSH_IMAGE_BUTTON_H */
 

Index: gtkshell/row.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/row.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- gtkshell/row.c      1 Mar 2007 18:54:04 -0000       1.12
+++ gtkshell/row.c      4 Mar 2007 23:11:04 -0000       1.13
@@ -42,9 +42,16 @@
 void
 gsh_manage(struct GSH * gsh, GtkWidget *widget)
 {
+       if(GTK_IS_MENU(gsh->rows.v))
+       {
+               gtk_menu_shell_append(GTK_MENU_SHELL(gsh->rows.v), widget);
+       }
+       else
+       {
        gsh_check_row(gsh);
        gtk_container_add(GTK_CONTAINER(gsh->rows.v), widget);
        gsh_manage_generic(gsh, widget);
+       }
 }
 
 void
@@ -55,7 +62,7 @@
         * Checking for a 1 row counter allows the ACE Deskbar to
         * maintain a decent appearance.
         */
-       if (gsh->rows.rows != 1)
+       if ((!gsh->rows.rows != 1) && !GTK_IS_MENU(gsh->rows.v))
        {
                gsh_check_row(gsh);
                gtk_box_pack_start(GTK_BOX(gsh->rows.v), widget,




reply via email to

[Prev in Thread] Current Thread [Next in Thread]