antiright-devel
[Top][All Lists]
Advanced

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

[Antiright-devel] antiright/gtkshell button.c guidl.lex guidl.y i...


From: Jeffrey Bedard
Subject: [Antiright-devel] antiright/gtkshell button.c guidl.lex guidl.y i...
Date: Fri, 27 Apr 2007 20:51:43 +0000

CVSROOT:        /sources/antiright
Module name:    antiright
Changes by:     Jeffrey Bedard <jefbed> 07/04/27 20:51:42

Modified files:
        gtkshell       : button.c guidl.lex guidl.y image_button.c 
                         menu.c row.c 

Log message:
        Fixed menu support on broken gtk implementations by using a
        menubar as the base for the menu launcher button.  This
        eliminates the necessity for popup handler code.  Readded
        the button token to guidl.  Added more tests for widget type
        for menu support.  

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/button.c?cvsroot=antiright&r1=1.27&r2=1.28
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/guidl.lex?cvsroot=antiright&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/guidl.y?cvsroot=antiright&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/image_button.c?cvsroot=antiright&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/menu.c?cvsroot=antiright&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/row.c?cvsroot=antiright&r1=1.15&r2=1.16

Patches:
Index: button.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/button.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -b -r1.27 -r1.28
--- button.c    27 Apr 2007 02:02:06 -0000      1.27
+++ button.c    27 Apr 2007 20:51:42 -0000      1.28
@@ -51,20 +51,23 @@
        struct GSH_CBData * cb;
 
        cb = gsh_new_GSH_CBData(gsh, g_strdup(command));
-       if(GTK_IS_MENU_ITEM(gsh->button)) /* menu item button  */
+       if(!GSH_FLAG(GSH_MENU_BUTTON) 
+          && GTK_IS_MENU_ITEM(gsh->button)) /* menu item button  */
                (void) g_signal_connect(G_OBJECT(gsh->button), 
                                "activate", G_CALLBACK(gsh_system_cb), cb);
        else if(!GSH_FLAG(GSH_MENU_BUTTON)) /* not a menu launcher button */
                (void) g_signal_connect(G_OBJECT(gsh->button), 
                                "clicked", G_CALLBACK(gsh_system_cb), cb);
-       else /* Button is a menu launcher button.  */
+
+       if(GSH_FLAG(GSH_MENU_BUTTON)) /* Button is a menu launcher button.  */
                GSH_UNSET(GSH_MENU_BUTTON);
 }
 
 static void
 create_button(struct GSH * gsh)
 {
-       if(!GTK_IS_MENU(gsh->rows.v))
+       if(!GTK_IS_MENU(gsh->rows.v) 
+          && !GTK_IS_MENU_BAR(gsh->rows.v))
                gsh->button = gtk_button_new();
        else
                gsh->button = gtk_menu_item_new();

Index: guidl.lex
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/guidl.lex,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- guidl.lex   27 Apr 2007 02:02:06 -0000      1.10
+++ guidl.lex   27 Apr 2007 20:51:42 -0000      1.11
@@ -15,11 +15,10 @@
 ;              return END;
 option         return OPTION;
 add            return ADD;
+button         return BUTTON;
 buttons                return BUTTONS;
 echo           return TOKEN_ECHO;
 dialog         return DIALOG;
-
 [ \t\n]                /* ignore */;
 "//".*$                /* comment */;
-
 %%

Index: guidl.y
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/guidl.y,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- guidl.y     27 Apr 2007 02:02:06 -0000      1.18
+++ guidl.y     27 Apr 2007 20:51:42 -0000      1.19
@@ -55,9 +55,8 @@
        gchar * string;
        gint number;
 }
-%token IFS SC COMMA OPTION
-%token END ADD BUTTONS
-%token DIALOG TOKEN_ECHO
+%token IFS SC COMMA OPTION DIALOG 
+%token END ADD BUTTONS BUTTON TOKEN_ECHO
 %token <string> STRING
 %token <number> NUM
 %%
@@ -125,6 +124,8 @@
 }
 |
 ADD BUTTONS buttons
+|
+ADD BUTTON button
 ;
 
 buttons:

Index: image_button.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/image_button.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- image_button.c      19 Mar 2007 09:33:07 -0000      1.8
+++ image_button.c      27 Apr 2007 20:51:42 -0000      1.9
@@ -27,7 +27,8 @@
                     GtkWidget * image)
 {
        gsh_command_button(gsh, command);
-       if(!GTK_IS_MENU(gsh->rows.v))
+       if(!GTK_IS_MENU_BAR(gsh->rows.v) && !GTK_IS_MENU_ITEM(gsh->rows.v)
+          && !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);
@@ -51,8 +52,8 @@
        }
 }
 
-void
-gsh_image_button(struct GSH * gsh, char *command, char *name)
+static GtkWidget *
+get_image(const gchar * name)
 {
        GtkWidget *image;
 
@@ -85,6 +86,12 @@
                g_free(prefixed_name);
        }
 
-       generic_image_button(gsh, command, image);
+       return image;
+}
+
+void
+gsh_image_button(struct GSH * gsh, char *command, char *name)
+{
+       generic_image_button(gsh, command, get_image(name));
 }
 

Index: menu.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/menu.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- menu.c      24 Apr 2007 21:54:21 -0000      1.2
+++ menu.c      27 Apr 2007 20:51:42 -0000      1.3
@@ -51,22 +51,6 @@
        g_strfreev(pair);
 }
 
-/* This is connected with g_signal_connect_swapped,
- * so WIDGET is the menu widget, rather than the button.  */
-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
 add_menu_items(struct GSH * gsh, GtkWidget * menu, gchar **tokens)
 {
@@ -89,16 +73,26 @@
 void
 menubutton_parse(struct GSH * gsh, gchar **tokens)
 {
+       GtkWidget * menu_bar;
+       GtkWidget * menu_item;
        GtkWidget * menu;
        
+       menu_bar = gtk_menu_bar_new();
+       gtk_widget_show(menu_bar);
+       gsh_manage(gsh, menu_bar);
+       {
+               GtkWidget * old_row; 
+
+               old_row=gsh->rows.v;
+               gsh->rows.v=menu_bar;
        GSH_SET(GSH_MENU_BUTTON);
-       /* Add menu launcher button.  */
-       gsh_new_button(gsh, tokens[0]);
+               menu_item=gsh_add_button(gsh, tokens[0]);
+               gsh->rows.v=old_row;
+       }
        menu=gtk_menu_new(); 
+       gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), menu);
+       gtk_widget_show(menu_item);
        gtk_widget_show(menu);
-       /*gtk_menu_attach_to_widget(GTK_MENU(menu), gsh->button, NULL);*/
-       g_signal_connect_swapped(gsh->button, "clicked",
-                       G_CALLBACK(popup_handler), menu);
        add_menu_items(gsh, menu, tokens);
 }
 

Index: row.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/row.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- row.c       16 Apr 2007 01:19:51 -0000      1.15
+++ row.c       27 Apr 2007 20:51:42 -0000      1.16
@@ -32,7 +32,8 @@
 void
 gsh_manage(struct GSH * gsh, GtkWidget *widget)
 {
-       if(GTK_IS_MENU(gsh->rows.v))
+       if(GTK_IS_MENU(gsh->rows.v) || GTK_IS_MENU_BAR(gsh->rows.v)
+               || GTK_IS_MENU_ITEM(gsh->rows.v))
        {
                gtk_menu_shell_append(GTK_MENU_SHELL(gsh->rows.v), widget);
        }
@@ -52,7 +53,10 @@
         * Checking for a 1 row counter allows the ACE Deskbar to
         * maintain a decent appearance.
         */
-       if ((gsh->rows.rows != 1) && !GTK_IS_MENU(gsh->rows.v))
+       if ((gsh->rows.rows != 1) 
+           && !GTK_IS_MENU(gsh->rows.v)
+           && !GTK_IS_MENU_BAR(gsh->rows.v)
+           && !GTK_IS_MENU_ITEM(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]