Re: The whole panel focus/keynav thing



On Mon, 2002-05-27 at 16:30, Bill Haneman wrote:
> On Mon, 2002-05-27 at 20:33, Seth Nickell wrote:
> > On Mon, 2002-05-27 at 06:37, Bill Haneman wrote:
> > > Padraig/All:
> > > 
> > > I don't think we should make such a statement without further
> > > researching the issues here.
> > 
> > Yes we should. This close to release we should have backed the change
> > out a few days ago. It can be added back in if it can be made to work.
> > We shouldn't have regressions / new brokenness, period. Its not
> > difficult to add the changes in again if they can be made to work
> > smoothly. I don't see why that is not the automatic model we should be
> > following here ?!?
> > 
> > That said, I would be much more comfortable if the changes would be run
> > by a release team member before they are committed since they *have* a
> > history of breaking things.
> 
> The patch was posted for comments for over a week (maybe two) before
> being committed.  RT members *were* consulted.
> 
> Also please recall that we said months ago that the prelight behavior
> would be reinstated if we did not come up with a working alternate
> solution, so this is not entirely a new issue.
> 
> Lots of folks have whinged about this but when it comes to actually
> making this work, no one else has offered a solution that meets all
> accessibility needs, and we have been left to do all the work.

Just because we can't find another way to make this work does not mean
that the change is acceptable.

-Seth


> > 
> > > To some extent the reported behavior is expected for cases where people
> > > are installing their own RC-FILE-based gtk+ themes, in order to get best
> > > results for non-default themes a couple of additional lines must be
> > > added to the RC files in question.
> > > 
> > > This is required in order to allow such themes to work; if we had
> > > hard-wired panel behavior to ignore RC files/themes other than default,
> > > that would have been an even more serious theme violation.
> > > 
> > > I suggest that the fix probably involves 3-4 lines in the RC files.  
> > 
> > This is essentially an API change, and its a change to an API that is
> > used by more than 400 modules in themes.org alone. We are WAY past API
> > freeze, and we're even into UI freeze at this point (this is a UI
> > change). Additionally we have no good way of contacting theme authors,
> > and I bet many of them will see the behavior and *not* figure it out,
> > releasing broken half-ass themes. Those that do figure the problem out
> > will probably waste hours first.
> > 
> > Personally, I would much rather approve the addition of
> > "atk_bad_hack_alert_panel_focus ()" no ATK then something that's pretty
> > much inevitably going to cause mass breakage. 
> > 
> > > The ability to turn on some sort of panel focus highlighting is truly
> > > required, and after weeks of back-and-forth I believe we came up with
> > > the best solution.  The plan is to work correctly with the default case,
> > > and require minimum changes to other themes/RC files.
> > 
> > The problem is not the size of the changes, the problem is that you are
> > requiring API changes, and worse to a huge number of external modules
> > with which we have no good communication. Worse, the changes don't cause
> > total breakage so many people will never fix the problem.
> > 
> > -Seth
> > 
> > > On Mon, 2002-05-27 at 11:55, Padraig O'Briain wrote:
> > > > We are discussing this nand if we do not come up with a fix we will remove 
> > > > setting the state to SELECTED tomorrow.
> > > > 
> > > > Padraig
> > > > 
> > > > > 
> > > > > With pretty much any theme but Raleigh these end up with the same
> > > > > problematic prelighting behavior that we had before...
> > > > > 
> > > > > -Seth
> > > > > 
> > > > > On Fri, 2002-05-24 at 11:25, Luis Villa wrote:
> > > > > > I take it these patches were committed last night, Padraig? The current
> > > > > > behavior (at least as seen in today's snapshot) does not work as you
> > > > > > intended- SELECTED is very, very different than NORMAL. Will that be
> > > > > > fixed today or should I file a bug and assign it to you?
> > > > > > Luis
> > > > > > 
> > > > > > On Tue, 2002-05-14 at 04:20, Padraig O'Briain wrote:
> > > > > > > I have patches for gnome-panel which do the following:
> > > > > > > 
> > > > > > > 1) Remove the capability of focusing the PanelWidget using Ctrl+Tab
> > > > > > > 
> > > > > > > 2) Add support for popping up PanelWidget's context menu by pressing 
> > > > Ctrl+F10.
> > > > > > > 
> > > > > > > 3) Set state of PanelWidget and its children to SELECTED when focus is in 
> > > > panel.
> > > > > > > 
> > > > > > > 4) Add default panel rc file (panelrc) installed in $(datadir)/gnome-panel 
> > > > which 
> > > > > > > causes SELECTED state to look the same as NORMAL state for PanelWidget and 
> > > > > > > applets. To see focus indicator for panel add the following lines to 
> > > > .gtkrc-2.0.
> > > > > > > 
> > > > > > > style "prelight-selected"
> > > > > > > {
> > > > > > >   fg[SELECTED] = { 0, 0, 0 }
> > > > > > >   bg[SELECTED] = { 0xea60, 0xea60, 0xea60 }
> > > > > > > }
> > > > > > > 
> > > > > > > widget_class "*PanelWidget*" style "prelight-selected"
> > > > > > > widget_class "*PanelApplet*" style "prelight-selected"
> > > > > > > 
> > > > > > > 
> > > > > > > 
> > > > > > > 5) Load default panel rc file at startup of gnome-panel and out-of-process 
> > > > > > > applets.
> > > > > > > 
> > > > > > > 4) Use style value for focus-line-with and focus-padding when drawing 
> > > > focus 
> > > > > > > indicator, instead of using hardcoded values.
> > > > > > > 
> > > > > > > 6) Highlight ButtonWidget when it has focus.
> > > > > > > 
> > > > > > > 
> > > > > > > Feedback requested.
> > > > > > > 
> > > > > > > Padraig
> > > > > > > 
> > > > > > > > 
> > > > > > > > Yes, I'm sure you hoped it had just gone away for good :)  But with the
> > > > > > > > final UI freeze looming fast, we need to nail the whole issue about
> > > > > > > > panel keynav, and showing panel focus.  
> > > > > > > > 
> > > > > > > > We know you didn't like what we did last time, so here's our new
> > > > > > > > proposal, which, unless there are any obvious issues or better ideas
> > > > > > > > that haven't already been shouted down in previous discussions, we'll be
> > > > > > > > unleashing Padraig on to implement anytime soon...
> > > > > > > > 
> > > > > > > > Executive summary: by default, you won't notice anything different from
> > > > > > > > what currently happens ("currently" meaning "since the highlighting was
> > > > > > > > removed again", that is!). Except that when they're focused, you'll get
> > > > > > > > a normal focus indicator around some applets that don't currently have
> > > > > > > > them.
> > > > > > > > 
> > > > > > > > The details:
> > > > > > > > 
> > > > > > > > 1) The panel background will no longer be focusable, except when there
> > > > > > > > are no objects on it.  Instead, focusing a panel will always give focus
> > > > > > > > to an object *on* the panel.
> > > > > > > > 
> > > > > > > > 2) By default, the panel background will not highlight when an object on
> > > > > > > > the panel has focus.  Well actually, it will, but the default will be to
> > > > > > > > use the same colour as the panel background, so you won't notice--
> > > > > > > > honest :)  This means that people who *need* the panel highlight can
> > > > > > > > easily get it thematically, by changing the panel background highlight
> > > > > > > > colour.  Panels with pixmap backgrounds will be unaffected, their
> > > > > > > > backgrounds won't highlight regardless.
> > > > > > > > 
> > > > > > > > 3) To pop up the panel right-click menu, instead of focusing the panel
> > > > > > > > background (which won't be possible any more) and pressing Shift-F10,
> > > > > > > > there will be an additional keyboard shortcut available, probably
> > > > > > > > something like Ctrl-F10 or Alt-F10, that pops up the panel menu when any
> > > > > > > > object on the panel has focus.  (Or when the panel background has focus,
> > > > > > > > if the panel is empty).
> > > > > > > > 
> > > > > > > > 4) Applets: we may have to shave a pixel or two off the heights of some
> > > > > > > > applets to leave room to show a discernable focus indicator.  However,
> > > > > > > > some of them already seem to have some padding around them, so hopefully
> > > > > > > > we'll be able to minimise the amount of shaving we need to do :)  If we
> > > > > > > > can still make the active area extend right to the edge of the screen
> > > > > > > > for applets on edge panels, we will*.  But usability-wise it's slightly
> > > > > > > > less important that this works for applets anyway, as in many cases
> > > > > > > > there's not much to gain by just clicking on an applet-- you often need
> > > > > > > > to click on a particular control or area inside the applet instead, so
> > > > > > > > having the edge of the screen available as a big target doesn't really
> > > > > > > > improve matters there.
> > > > > > > > 
> > > > > > > > That is all... suggestions/objections to be filed in writing ASAP  :o)
> > > > > > > > 
> > > > > > > > Cheeri,
> > > > > > > > Calum.
> > > > > > > > 
> > > > > > > > * Although this already seems to be broken for non-menu panels (e.g. the
> > > > > > > > window list, which goes right up to the top of the screen if you stick
> > > > > > > > it on the menu panel, but not right down to the bottom when it's on the
> > > > > > > > bottom edge panel).
> > > > > > > > 
> > > > > > > > -- 
> > > > > > > > CALUM BENSON, Usability Engineer       Sun Microsystems Ireland
> > > > > > > > mailto:calum benson ireland sun com    Desktop Engineering Group
> > > > > > > > http://www.sun.ie                      +353 1 819 9771
> > > > > > > > 
> > > > > > > > Any opinions are personal and not necessarily those of Sun Microsystems
> > > > > > > > _______________________________________________
> > > > > > > > gnome-accessibility-list mailing list
> > > > > > > > gnome-accessibility-list gnome org
> > > > > > > > http://mail.gnome.org/mailman/listinfo/gnome-accessibility-list
> > > > > > > 
> > > > > > > ____________________________________________________________________
> > > > > > > 
> > > > > > > cvs server: Diffing .
> > > > > > > Index: ChangeLog
> > > > > > > ===================================================================
> > > > > > > RCS file: /cvs/gnome/gnome-panel/gnome-panel/ChangeLog,v
> > > > > > > retrieving revision 1.1744
> > > > > > > diff -u -p -r1.1744 ChangeLog
> > > > > > > --- ChangeLog	13 May 2002 23:47:28 -0000	1.1744
> > > > > > > +++ ChangeLog	14 May 2002 08:14:55 -0000
> > > > > > > @@ -1,3 +1,49 @@
> > > > > > > +2002-05-14  Padraig O'Briain  <padraig obriain sun com>
> > > > > > > +
> > > > > > > +	* panelrc:
> > > > > > > +	rc file which ensures that SELECTED state for PanelWidget and its 
> > > > > > > +	children is not visible, by defaulta
> > > > > > > +
> > > > > > > +	* Makefile.am:
> > > > > > > +	Update so that panelrc file is installed in $(datadir)/gnome-panel
> > > > > > > +
> > > > > > > +	* basep-widget.[ch]: foobar-widget.[ch]
> > > > > > > +	Remove move-focus-out signal as moving focus from applet to PanelWidget
> > > > > > > +	is not supported
> > > > > > > +	Remove basep_key_press, default signal handler forkey_press_event
> > > > > > > +
> > > > > > > +	* button-widget.c:
> > > > > > > +	(button_widget_expose) Highlight widget when it has focus
> > > > > > > +	Draw focus indication using style's focus-line-width" and 
> > > > > > > +	"focus-padding"
> > > > > > > +
> > > > > > > +	* main.c (main):
> > > > > > > +	Call gtk_rc_add_default_file () for panelrc. so PanelWidghet and applets
> > > > > > > +	will show state SELECTED as NORMAL, by default
> > > > > > > +
> > > > > > > +	* panel-marshal.list:
> > > > > > > +	Add BOOLEAN:VOID for new signal popup_panel_menu
> > > > > > > +
> > > > > > > +	* panel-widget.c:
> > > > > > > +	Add new signal popup_panel_menu which pops up context menu for
> > > > > > > +	PanelWidget; use Ctrl+F10 to activate the signal.
> > > > > > > +	Remove function panel_widget_save_key_event()
> > > > > > > +	Remove function panel_widget_focus() which was useed to implement
> > > > > > > +	Remove function panel_widget_focus_in_event() and 
> > > > > > > +	panel_widget_focus_out_event()
> > > > > > > +	Ctrl+Tab to move focus from applet to PanelWidget
> > > > > > > +	(panel_widget_finalize): Remove reference to panel->key_event
> > > > > > > +	(panel_widget_real_focus): Remove reference to panel->key_event
> > > > > > > +	which supported giving focus to PanelWidget when focus was inside 
> > > > > > > +	an applet in another process. Remove CAN_FOCUS flag if PanelWidget
> > > > > > > +	has children.
> > > > > > > +	
> > > > > > > +	panel.c:
> > > > > > > +	(panel_end_move) Do not give focus to PanelWidget on mouse click
> > > > > > > +	(panel_widget_event): For key press, check whether focus widget is a 
> > > > > > > +	GtkSocket; if so, activate bindings
> > > > > > > +	Set state to GTK_STATE_SELECTED for focus in.
> > > > > > > +
> > > > > > >  2002-05-13  Seth Nickell  <snickell stanford edu>
> > > > > > >  
> > > > > > >  	* foobar-widget.c: (append_actions_menu):
> > > > > > > Index: Makefile.am
> > > > > > > ===================================================================
> > > > > > > RCS file: /cvs/gnome/gnome-panel/gnome-panel/Makefile.am,v
> > > > > > > retrieving revision 1.278
> > > > > > > diff -u -p -r1.278 Makefile.am
> > > > > > > --- Makefile.am	29 Apr 2002 20:30:09 -0000	1.278
> > > > > > > +++ Makefile.am	14 May 2002 08:14:55 -0000
> > > > > > > @@ -13,6 +13,7 @@ INCLUDES =							
> > > > \
> > > > > > >  	-DPANEL_DEBUG						\
> > > > > > >  	-DGNOMELOCALEDIR=\""$(datadir)/locale"\"		\
> > > > > > >  	-DGLADEDIR=\""$(datadir)/gnome/panel"\"			\
> > > > > > > +	-DPANELRC=\""$(rcdir)/$(rc_DATA)"\"			\
> > > > > > >  	$(DISABLE_DEPRECATED_CFLAGS)				\
> > > > > > >  	$(STANDARD_PROPERTIES_CFLAGS)				\
> > > > > > >  	$(ALLOW_CRACKPOT_MENU_CODE)				\
> > > > > > > @@ -214,7 +215,8 @@ EXTRA_DIST =					\
> > > > > > >  	nothing.h				\
> > > > > > >  	$(schema_DATA)				\
> > > > > > >  	$(ui_DATA)				\
> > > > > > > -	panel-marshal.list
> > > > > > > +	panel-marshal.list			\
> > > > > > > +	panelrc
> > > > > > >  
> > > > > > >  sysdir = $(datadir)/control-center-2.0/capplets
> > > > > > >  sys_in_files = gnome-panel-preferences.desktop.in
> > > > > > > @@ -272,6 +274,9 @@ schema_DATA = panel-global-config.schema
> > > > > > >  serverdir       = $(libdir)/bonobo/servers
> > > > > > >  server_in_files = GNOME_Panel.server.in
> > > > > > >  server_DATA     = $(server_in_files:.server.in=.server)
> > > > > > > +
> > > > > > > +rcdir = $(datadir)/gnome-panel
> > > > > > > +rc_DATA = panelrc
> > > > > > >  
> > > > > > >  @INTLTOOL_SERVER_RULE@
> > > > > > >  
> > > > > > > Index: basep-widget.c
> > > > > > > ===================================================================
> > > > > > > RCS file: /cvs/gnome/gnome-panel/gnome-panel/basep-widget.c,v
> > > > > > > retrieving revision 1.169
> > > > > > > diff -u -p -r1.169 basep-widget.c
> > > > > > > --- basep-widget.c	22 Apr 2002 16:35:49 -0000	1.169
> > > > > > > +++ basep-widget.c	14 May 2002 08:14:56 -0000
> > > > > > > @@ -50,7 +50,6 @@ static void basep_pos_class_init (BasePP
> > > > > > >  static void basep_pos_instance_init (BasePPos *pos);
> > > > > > >  
> > > > > > >  /* Forward declare some static functions for use in the class init */
> > > > > > > -static void basep_widget_move_focus_out (BasePWidget *basep);
> > > > > > >  static void basep_widget_mode_change (BasePWidget *basep, BasePMode 
> > > > mode);
> > > > > > >  static void basep_widget_state_change (BasePWidget *basep, BasePState 
> > > > state);
> > > > > > >  static void basep_widget_real_screen_change (BasePWidget *basep, int 
> > > > screen);
> > > > > > > @@ -60,7 +59,6 @@ static void basep_widget_realize (GtkWid
> > > > > > >  static void basep_widget_map (GtkWidget *w);
> > > > > > >  static gboolean basep_enter_notify (GtkWidget *widget, GdkEventCrossing 
> > > > *event);
> > > > > > >  static gboolean basep_leave_notify (GtkWidget *widget, GdkEventCrossing 
> > > > *event);
> > > > > > > -static gboolean basep_key_press (GtkWidget *widget, GdkEventKey *event);
> > > > > > >  static void basep_style_set (GtkWidget *widget, GtkStyle 
> > > > *previous_style);
> > > > > > >  static void basep_widget_destroy (GtkObject *o);
> > > > > > >  
> > > > > > > @@ -127,11 +125,9 @@ basep_widget_class_init (BasePWidgetClas
> > > > > > >  	GObjectClass *object_class = G_OBJECT_CLASS (klass);
> > > > > > >  	GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (klass);
> > > > > > >  	GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
> > > > > > > -	GtkBindingSet *binding_set;
> > > > > > >  	
> > > > > > >  	basep_widget_parent_class = g_type_class_ref (gtk_window_get_type ());
> > > > > > >  
> > > > > > > -	klass->move_focus_out = basep_widget_move_focus_out;
> > > > > > >  	klass->mode_change = basep_widget_mode_change;
> > > > > > >  	klass->state_change = basep_widget_state_change;
> > > > > > >  	klass->screen_change = basep_widget_real_screen_change;
> > > > > > > @@ -142,7 +138,6 @@ basep_widget_class_init (BasePWidgetClas
> > > > > > >  	widget_class->map = basep_widget_map;
> > > > > > >  	widget_class->enter_notify_event = basep_enter_notify;
> > > > > > >  	widget_class->leave_notify_event = basep_leave_notify;
> > > > > > > -	widget_class->key_press_event = basep_key_press;
> > > > > > >  	widget_class->style_set = basep_style_set;
> > > > > > >  
> > > > > > >  	gtk_object_class->destroy = basep_widget_destroy;
> > > > > > > @@ -195,17 +190,6 @@ basep_widget_class_init (BasePWidgetClas
> > > > > > >  			      1,
> > > > > > >  			      PANEL_TYPE_OBJECT_TYPE); */
> > > > > > >  
> > > > > > > -	basep_widget_signals[MOVE_FOCUS_OUT_SIGNAL] = 
> > > > > > > -		g_signal_new	("move_focus_out",
> > > > > > > -				G_TYPE_FROM_CLASS (object_class),
> > > > > > > -				G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
> > > > > > > -				G_STRUCT_OFFSET (BasePWidgetClass, 
> > > > move_focus_out),
> > > > > > > -				NULL,
> > > > > > > -				NULL,
> > > > > > > -				panel_marshal_VOID__VOID,
> > > > > > > -				G_TYPE_NONE,
> > > > > > > -				0);
> > > > > > > -
> > > > > > >  	basep_widget_signals[MODE_CHANGE_SIGNAL] = 
> > > > > > >  		g_signal_new	("mode_change",
> > > > > > >  			       	G_TYPE_FROM_CLASS (object_class),
> > > > > > > @@ -241,14 +225,6 @@ basep_widget_class_init (BasePWidgetClas
> > > > > > >  				G_TYPE_NONE,
> > > > > > >  				1,
> > > > > > >  				G_TYPE_INT);
> > > > > > > -
> > > > > > > -	binding_set = gtk_binding_set_by_class (gtk_object_class);
> > > > > > > -	gtk_binding_entry_add_signal (binding_set,
> > > > > > > -				      GDK_Tab, GDK_CONTROL_MASK,
> > > > > > > -				      "move_focus_out", 0);
> > > > > > > -	gtk_binding_entry_add_signal (binding_set,
> > > > > > > -				      GDK_KP_Tab, GDK_CONTROL_MASK,
> > > > > > > -				      "move_focus_out", 0);
> > > > > > >  }
> > > > > > >  
> > > > > > >  static void
> > > > > > > @@ -556,26 +532,6 @@ basep_widget_size_allocate (GtkWidget *w
> > > > > > >  }
> > > > > > >  
> > > > > > >  static void
> > > > > > > -basep_widget_move_focus_out (BasePWidget *basep)
> > > > > > > -{
> > > > > > > -	if (DRAWER_IS_WIDGET (basep)) {
> > > > > > > -		Drawer *drawer = g_object_get_data (G_OBJECT (basep),
> > > > > > > -               		                             DRAWER_PANEL_KEY);
> > > > > > > -		PanelWidget *panel = PANEL_WIDGET (drawer->button->parent);
> > > > > > > -		GtkWidget *parent = panel->panel_parent;
> > > > > > > -
> > > > > > > -		drawer_widget_close_drawer (DRAWER_WIDGET (basep), parent);
> > > > > > > -		drawer->moving_focus = TRUE;
> > > > > > > -		gtk_window_present (GTK_WINDOW (parent));
> > > > > > > -		gtk_widget_grab_focus (drawer->button);
> > > > > > > -	} else {
> > > > > > > -		PanelWidget *panel = PANEL_WIDGET (basep->panel);
> > > > > > > -
> > > > > > > -		panel_widget_focus (panel);
> > > > > > > -	}
> > > > > > > -}
> > > > > > > -
> > > > > > > -static void
> > > > > > >  basep_widget_mode_change (BasePWidget *basep, BasePMode old_mode)
> > > > > > >  {
> > > > > > >  	if (BORDER_IS_WIDGET (basep))
> > > > > > > @@ -824,24 +780,6 @@ basep_pos_instance_init (BasePPos *pos)
> > > > > > >  	return;
> > > > > > >  }
> > > > > > >  
> > > > > > > -static gboolean 
> > > > > > > -basep_key_press (GtkWidget *widget, GdkEventKey *event)
> > > > > > > -{
> > > > > > > -	BasePWidget *basep;
> > > > > > > -	PanelWidget *panel;
> > > > > > > -
> > > > > > > -	g_return_val_if_fail (BASEP_IS_WIDGET (widget), FALSE);
> > > > > > > -
> > > > > > > -	basep = BASEP_WIDGET (widget);
> > > > > > > -
> > > > > > > -	g_return_val_if_fail (PANEL_IS_WIDGET (basep->panel), FALSE);
> > > > > > > -
> > > > > > > -	panel = PANEL_WIDGET (basep->panel);
> > > > > > > -	
> > > > > > > -	panel_widget_save_key_event (panel, event);
> > > > > > > -	return GTK_WIDGET_CLASS (basep_widget_parent_class)->key_press_event 
> > > > (widget, event);
> > > > > > > -}
> > > > > > > - 
> > > > > > >  static gboolean
> > > > > > >  basep_leave_notify (GtkWidget *widget,
> > > > > > >  		    GdkEventCrossing *event)
> > > > > > > Index: basep-widget.h
> > > > > > > ===================================================================
> > > > > > > RCS file: /cvs/gnome/gnome-panel/gnome-panel/basep-widget.h,v
> > > > > > > retrieving revision 1.47
> > > > > > > diff -u -p -r1.47 basep-widget.h
> > > > > > > --- basep-widget.h	28 Feb 2002 07:49:39 -0000	1.47
> > > > > > > +++ basep-widget.h	14 May 2002 08:14:56 -0000
> > > > > > > @@ -106,8 +106,6 @@ struct _BasePWidgetClass
> > > > > > >  	/*void (*type_change)  (BasePWidget *basep,
> > > > > > >  			      PanelType type);*/
> > > > > > >  
> > > > > > > -	void (* move_focus_out)  (BasePWidget *basep);
> > > > > > > -
> > > > > > >  	void (* mode_change)  (BasePWidget *basep,
> > > > > > >  			       BasePMode old_mode);
> > > > > > >  
> > > > > > > Index: button-widget.c
> > > > > > > ===================================================================
> > > > > > > RCS file: /cvs/gnome/gnome-panel/gnome-panel/button-widget.c,v
> > > > > > > retrieving revision 1.98
> > > > > > > diff -u -p -r1.98 button-widget.c
> > > > > > > --- button-widget.c	18 Apr 2002 08:08:06 -0000	1.98
> > > > > > > +++ button-widget.c	14 May 2002 08:14:56 -0000
> > > > > > > @@ -442,10 +442,10 @@ button_widget_expose (GtkWidget         
> > > > > > >  	off = (button->in_button && button->button_down) ?
> > > > > > >  		SCALE(BUTTON_WIDGET_DISPLACEMENT) : 0;
> > > > > > >  	
> > > > > > > -	if (!global_config.highlight_when_over || !button->in_button) {
> > > > > > > -		pb = button_widget->scaled;
> > > > > > > -	} else {
> > > > > > > +	if (global_config.highlight_when_over && (button->in_button || 
> > > > GTK_WIDGET_HAS_FOCUS (widget))) {
> > > > > > >  		pb = button_widget->scaled_hc;
> > > > > > > +	} else {
> > > > > > > +		pb = button_widget->scaled;
> > > > > > >  	}
> > > > > > >  	
> > > > > > >  	w = gdk_pixbuf_get_width (pb);
> > > > > > > @@ -493,13 +493,21 @@ button_widget_expose (GtkWidget         
> > > > > > >  	}
> > > > > > >  
> > > > > > >  	if (GTK_WIDGET_HAS_FOCUS (widget)) {
> > > > > > > +		gint focus_width, focus_pad;
> > > > > > > +		gint x, y, width, height;
> > > > > > > +
> > > > > > > +		gtk_widget_style_get (widget,
> > > > > > > +				      "focus-line-width", &focus_width,
> > > > > > > +				      "focus-padding", &focus_pad,
> > > > > > > +				      NULL);
> > > > > > > +		x = widget->allocation.x + focus_pad;
> > > > > > > +		y = widget->allocation.y + focus_pad;
> > > > > > > +		width = widget->allocation.width -  (focus_width + 2 * 
> > > > focus_pad); focus_pad;
> > > > > > > +		height = widget->allocation.height -  (focus_width + 2 * 
> > > > focus_pad); focus_pad;
> > > > > > >  		gtk_paint_focus (widget->style, widget->window,
> > > > > > >  				 GTK_WIDGET_STATE (widget),
> > > > > > >  				 &event->area, widget, "button",
> > > > > > > -				 widget->allocation.x + 1,
> > > > > > > -				 widget->allocation.y + 1,
> > > > > > > -				 widget->allocation.width - 3,
> > > > > > > -				 widget->allocation.height - 3);
> > > > > > > +				 x, y, width, height);
> > > > > > >  	}
> > > > > > >  	
> > > > > > >  	return FALSE;
> > > > > > > Index: foobar-widget.c
> > > > > > > ===================================================================
> > > > > > > RCS file: /cvs/gnome/gnome-panel/gnome-panel/foobar-widget.c,v
> > > > > > > retrieving revision 1.157
> > > > > > > diff -u -p -r1.157 foobar-widget.c
> > > > > > > --- foobar-widget.c	13 May 2002 23:47:29 -0000	1.157
> > > > > > > +++ foobar-widget.c	14 May 2002 08:14:56 -0000
> > > > > > > @@ -54,10 +54,6 @@ static gboolean foobar_leave_notify	(Gtk
> > > > > > >  					 GdkEventCrossing *event);
> > > > > > >  static gboolean foobar_enter_notify	(GtkWidget *widget,
> > > > > > >  					 GdkEventCrossing *event);
> > > > > > > -static gboolean foobar_key_press	(GtkWidget *widget,
> > > > > > > -					 GdkEventKey *event);
> > > > > > > -static void foobar_widget_move_focus_out   (FoobarWidget *foo);
> > > > > > > -static void foobar_widget_move_focus_out   (FoobarWidget *foo);
> > > > > > >  static void append_task_menu (FoobarWidget *foo, GtkMenuShell *menu_bar);
> > > > > > >  static void setup_task_menu (FoobarWidget *foo);
> > > > > > >  
> > > > > > > @@ -103,7 +99,6 @@ foobar_widget_class_init (FoobarWidgetCl
> > > > > > >  {
> > > > > > >  	GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
> > > > > > >  	GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass);
> > > > > > > -	GtkBindingSet *binding_set;
> > > > > > >  
> > > > > > >  	object_class->destroy = foobar_widget_destroy;
> > > > > > >  
> > > > > > > @@ -111,9 +106,6 @@ foobar_widget_class_init (FoobarWidgetCl
> > > > > > >  	widget_class->size_allocate = foobar_widget_size_allocate;
> > > > > > >  	widget_class->enter_notify_event = foobar_enter_notify;
> > > > > > >  	widget_class->leave_notify_event = foobar_leave_notify;
> > > > > > > -	widget_class->key_press_event = foobar_key_press;
> > > > > > > -
> > > > > > > -	klass->move_focus_out = foobar_widget_move_focus_out;
> > > > > > >  
> > > > > > >  	gtk_rc_parse_string ("style \"panel-foobar-menubar-style\"\n"
> > > > > > >  			     "{\n"
> > > > > > > @@ -121,44 +113,6 @@ foobar_widget_class_init (FoobarWidgetCl
> > > > > > >  			     "GtkMenuBar::internal-padding = 0\n"
> > > > > > >  			     "}\n"
> > > > > > >  			     "widget \"*.panel-foobar-menubar\" style 
> > > > \"panel-foobar-menubar-style\"");
> > > > > > > -
> > > > > > > -	foobar_widget_signals[MOVE_FOCUS_OUT_SIGNAL] =
> > > > > > > -		g_signal_new	("move_focus_out",
> > > > > > > -				G_TYPE_FROM_CLASS (object_class),
> > > > > > > -				G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
> > > > > > > -				G_STRUCT_OFFSET (FoobarWidgetClass, 
> > > > move_focus_out),
> > > > > > > -				NULL, NULL,
> > > > > > > -                                panel_marshal_VOID__VOID,
> > > > > > > -				G_TYPE_NONE,
> > > > > > > -				0);
> > > > > > > -
> > > > > > > -	binding_set = gtk_binding_set_by_class (object_class);
> > > > > > > -	gtk_binding_entry_add_signal (binding_set,
> > > > > > > -                                      GDK_Tab, GDK_CONTROL_MASK,
> > > > > > > -                                      "move_focus_out", 0);
> > > > > > > -	gtk_binding_entry_add_signal (binding_set,
> > > > > > > -                                      GDK_KP_Tab, GDK_CONTROL_MASK,
> > > > > > > -                                      "move_focus_out", 0);
> > > > > > > -
> > > > > > > -
> > > > > > > -}
> > > > > > > -
> > > > > > > -static gboolean
> > > > > > > -foobar_key_press (GtkWidget *widget, GdkEventKey *event)
> > > > > > > -{
> > > > > > > - 	FoobarWidget *foobar;
> > > > > > > -	PanelWidget *panel;
> > > > > > > -
> > > > > > > -	g_return_val_if_fail (FOOBAR_IS_WIDGET (widget), FALSE);
> > > > > > > -
> > > > > > > -	foobar = FOOBAR_WIDGET (widget);
> > > > > > > -
> > > > > > > -	g_return_val_if_fail (PANEL_IS_WIDGET (foobar->panel), FALSE);
> > > > > > > -
> > > > > > > -	panel = PANEL_WIDGET (foobar->panel);
> > > > > > > -
> > > > > > > -	panel_widget_save_key_event (panel, event);
> > > > > > > -	return GTK_WIDGET_CLASS (foobar_widget_parent_class)->key_press_event 
> > > > (widget, event);
> > > > > > >  }
> > > > > > >  
> > > > > > >  static gboolean
> > > > > > > @@ -1033,10 +987,4 @@ foobar_widget_redo_window(FoobarWidget *
> > > > > > >  	gtk_drag_dest_set (widget, 0, NULL, 0, 0);
> > > > > > >  
> > > > > > >  	gtk_widget_map(widget);
> > > > > > > -}
> > > > > > > -
> > > > > > > -static void
> > > > > > > -foobar_widget_move_focus_out (FoobarWidget *foobar)
> > > > > > > -{
> > > > > > > - 	panel_widget_focus (PANEL_WIDGET (foobar->panel));
> > > > > > >  }
> > > > > > > Index: foobar-widget.h
> > > > > > > ===================================================================
> > > > > > > RCS file: /cvs/gnome/gnome-panel/gnome-panel/foobar-widget.h,v
> > > > > > > retrieving revision 1.30
> > > > > > > diff -u -p -r1.30 foobar-widget.h
> > > > > > > --- foobar-widget.h	29 Mar 2002 14:00:12 -0000	1.30
> > > > > > > +++ foobar-widget.h	14 May 2002 08:14:56 -0000
> > > > > > > @@ -52,8 +52,6 @@ struct _FoobarWidget
> > > > > > >  struct _FoobarWidgetClass
> > > > > > >  {
> > > > > > >  	GtkWindowClass panel_class;
> > > > > > > -
> > > > > > > -	void (*move_focus_out)  (FoobarWidget *foo);
> > > > > > >  };
> > > > > > >  
> > > > > > >  GType		foobar_widget_get_type		(void) G_GNUC_CONST;
> > > > > > > Index: main.c
> > > > > > > ===================================================================
> > > > > > > RCS file: /cvs/gnome/gnome-panel/gnome-panel/main.c,v
> > > > > > > retrieving revision 1.324
> > > > > > > diff -u -p -r1.324 main.c
> > > > > > > --- main.c	18 Apr 2002 14:58:06 -0000	1.324
> > > > > > > +++ main.c	14 May 2002 08:14:56 -0000
> > > > > > > @@ -176,6 +176,8 @@ main(int argc, char **argv)
> > > > > > >  	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
> > > > > > >  	textdomain (GETTEXT_PACKAGE);
> > > > > > >  
> > > > > > > +	gtk_rc_add_default_file (PANELRC);
> > > > > > > +
> > > > > > >  	gnome_program_init ("gnome-panel", VERSION,
> > > > > > >  			    LIBGNOMEUI_MODULE,
> > > > > > >  			    argc, argv,
> > > > > > > Index: panel-marshal.list
> > > > > > > ===================================================================
> > > > > > > RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel-marshal.list,v
> > > > > > > retrieving revision 1.9
> > > > > > > diff -u -p -r1.9 panel-marshal.list
> > > > > > > --- panel-marshal.list	20 Mar 2002 19:43:21 -0000	1.9
> > > > > > > +++ panel-marshal.list	14 May 2002 08:14:56 -0000
> > > > > > > @@ -6,3 +6,4 @@ VOID:POINTER
> > > > > > >  VOID:VOID
> > > > > > >  VOID:BOOLEAN
> > > > > > >  VOID:INT,INT
> > > > > > > +BOOLEAN:VOID
> > > > > > > Index: panel-widget.c
> > > > > > > ===================================================================
> > > > > > > RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel-widget.c,v
> > > > > > > retrieving revision 1.327
> > > > > > > diff -u -p -r1.327 panel-widget.c
> > > > > > > --- panel-widget.c	10 May 2002 16:13:35 -0000	1.327
> > > > > > > +++ panel-widget.c	14 May 2002 08:14:56 -0000
> > > > > > > @@ -73,11 +73,6 @@ static void panel_widget_style_set      
> > > > > > >  					 GtkStyle         *previous_style);
> > > > > > >  static void panel_widget_realize        (GtkWidget        *widget);
> > > > > > >  
> > > > > > > -static gboolean panel_widget_focus_in_event (GtkWidget        *widget,
> > > > > > > -					     GdkEventFocus    *event);
> > > > > > > -static gboolean panel_widget_focus_out_event(GtkWidget        *widget,
> > > > > > > -					     GdkEventFocus    *event);
> > > > > > > -
> > > > > > >  static void panel_widget_push_move_applet   (PanelWidget      *panel,
> > > > > > >                                               GtkDirectionType  dir);
> > > > > > >  static void panel_widget_switch_move_applet (PanelWidget      *panel,
> > > > > > > @@ -87,6 +82,7 @@ static void panel_widget_free_move_apple
> > > > > > >  static void panel_widget_tab_move           (PanelWidget      *panel,
> > > > > > >                                               gboolean          next);
> > > > > > >  static void panel_widget_end_move           (PanelWidget      *panel);
> > > > > > > +static gboolean panel_widget_popup_panel_menu   (PanelWidget      
> > > > *panel);
> > > > > > >  static gboolean panel_widget_real_focus     (GtkWidget        *widget,
> > > > > > >                                               GtkDirectionType  
> > > > direction);
> > > > > > >  
> > > > > > > @@ -178,6 +174,7 @@ enum {
> > > > > > >  	FREE_MOVE_SIGNAL,
> > > > > > >  	TAB_MOVE_SIGNAL,
> > > > > > >  	END_MOVE_SIGNAL,
> > > > > > > +	POPUP_PANEL_MENU_SIGNAL,
> > > > > > >  	LAST_SIGNAL
> > > > > > >  };
> > > > > > >  
> > > > > > > @@ -320,6 +317,9 @@ panel_widget_class_init (PanelWidgetClas
> > > > > > >  	GObjectClass *gobject_class = (GObjectClass*) class;
> > > > > > >  	GtkWidgetClass *widget_class = (GtkWidgetClass*) class;
> > > > > > >  	GtkContainerClass *container_class = (GtkContainerClass*) class;
> > > > > > > +	GtkBindingSet *binding_set;
> > > > > > > +
> > > > > > > +	binding_set = gtk_binding_set_by_class (class);
> > > > > > >  
> > > > > > >  	panel_widget_signals[ORIENT_CHANGE_SIGNAL] =
> > > > > > >                  g_signal_new ("orient_change",
> > > > > > > @@ -466,6 +466,17 @@ panel_widget_class_init (PanelWidgetClas
> > > > > > >                                G_TYPE_NONE,
> > > > > > >                                0);
> > > > > > >  
> > > > > > > +	panel_widget_signals[POPUP_PANEL_MENU_SIGNAL] =
> > > > > > > +		g_signal_new ("popup_panel_menu",
> > > > > > > +                              G_TYPE_FROM_CLASS (class),
> > > > > > > +                              G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
> > > > > > > +                              G_STRUCT_OFFSET (PanelWidgetClass, 
> > > > popup_panel_menu),
> > > > > > > +                              NULL,
> > > > > > > +                              NULL,
> > > > > > > +                              panel_marshal_BOOLEAN__VOID,
> > > > > > > +                              G_TYPE_BOOLEAN,
> > > > > > > +                              0);
> > > > > > > +
> > > > > > >  	class->orient_change = NULL;
> > > > > > >  	class->size_change = NULL;
> > > > > > >  	class->applet_move = NULL;
> > > > > > > @@ -478,6 +489,7 @@ panel_widget_class_init (PanelWidgetClas
> > > > > > >  	class->free_move = panel_widget_free_move_applet;
> > > > > > >  	class->tab_move = panel_widget_tab_move;
> > > > > > >  	class->end_move = panel_widget_end_move;
> > > > > > > +	class->popup_panel_menu = panel_widget_popup_panel_menu;
> > > > > > >  
> > > > > > >  	object_class->destroy = panel_widget_destroy;
> > > > > > >  	gobject_class->finalize = panel_widget_finalize;
> > > > > > > @@ -487,12 +499,13 @@ panel_widget_class_init (PanelWidgetClas
> > > > > > >  	widget_class->realize = panel_widget_realize;
> > > > > > >  	widget_class->expose_event = panel_widget_expose;
> > > > > > >  	widget_class->style_set = panel_widget_style_set;
> > > > > > > -	widget_class->focus_in_event = panel_widget_focus_in_event;
> > > > > > > -	widget_class->focus_out_event = panel_widget_focus_out_event;
> > > > > > >  	widget_class->focus = panel_widget_real_focus;
> > > > > > >  
> > > > > > >  	container_class->add = panel_widget_cadd;
> > > > > > >  	container_class->remove = panel_widget_cremove;
> > > > > > > +
> > > > > > > +	gtk_binding_entry_add_signal (binding_set, GDK_F10, GDK_CONTROL_MASK,
> > > > > > > +				      "popup_panel_menu", 0);
> > > > > > >  }
> > > > > > >  
> > > > > > >  static void
> > > > > > > @@ -1715,9 +1728,6 @@ panel_widget_finalize (GObject *obj)
> > > > > > >  	g_free (panel->unique_id);
> > > > > > >  	panel->unique_id = NULL;
> > > > > > >  
> > > > > > > -	if (panel->key_event)
> > > > > > > -		gdk_event_free ((GdkEvent *)panel->key_event);
> > > > > > > -
> > > > > > >  	if (G_OBJECT_CLASS (panel_widget_parent_class)->finalize)
> > > > > > >  		G_OBJECT_CLASS (panel_widget_parent_class)->finalize (obj);
> > > > > > >  }
> > > > > > > @@ -2950,69 +2960,15 @@ panel_widget_end_move (PanelWidget *pane
> > > > > > >  }
> > > > > > >  
> > > > > > >  static gboolean
> > > > > > > -panel_widget_focus_in_event (GtkWidget *widget, GdkEventFocus *event)
> > > > > > > -{
> > > > > > > -	/*
> > > > > > > -	 * FIXME: we need to figure out something sensible
> > > > > > > -	 *        to do to indicate focus
> > > > > > > -	 */
> > > > > > > -
> > > > > > > -	GTK_WIDGET_CLASS (panel_widget_parent_class)->focus_in_event (widget, 
> > > > event);
> > > > > > > -
> > > > > > > -	return FALSE;
> > > > > > > -}
> > > > > > > -
> > > > > > > -static gboolean
> > > > > > > -panel_widget_focus_out_event (GtkWidget *widget, GdkEventFocus *event)
> > > > > > > -{
> > > > > > > -	PanelWidget *panel_widget = PANEL_WIDGET (widget);
> > > > > > > -
> > > > > > > -	if (GTK_WINDOW (panel_widget->panel_parent)->has_focus)
> > > > > > > -		GTK_WIDGET_UNSET_FLAGS (widget, GTK_CAN_FOCUS);
> > > > > > > -
> > > > > > > -	GTK_WIDGET_CLASS (panel_widget_parent_class)->focus_out_event (widget, 
> > > > event);
> > > > > > > -
> > > > > > > -	return FALSE;
> > > > > > > -}
> > > > > > > -
> > > > > > > -static gboolean
> > > > > > >  panel_widget_real_focus (GtkWidget        *widget,
> > > > > > >                           GtkDirectionType  direction)
> > > > > > >  {
> > > > > > > -	PanelWidget *panel = PANEL_WIDGET (widget);
> > > > > > > -
> > > > > > > -	if (panel->key_event) {
> > > > > > > -		if (panel->key_event->state & GDK_CONTROL_MASK) {
> > > > > > > -			/*
> > > > > > > -	 		 * Ctrl+Tab was pressed when focus was in applet in
> > > > > > > -			 * another process
> > > > > > > -			 */
> > > > > > > -			panel_widget_focus (PANEL_WIDGET (widget));
> > > > > > > -			return TRUE;
> > > > > > > -		}
> > > > > > > -	}
> > > > > > > -
> > > > > > > -	if (GTK_WIDGET_HAS_FOCUS (widget)) {
> > > > > > > +	if (GTK_WIDGET_HAS_FOCUS (widget) && GTK_FIXED (widget)->children) {
> > > > > > >  		GTK_WIDGET_UNSET_FLAGS (widget, GTK_CAN_FOCUS);
> > > > > > >  	}
> > > > > > >  	return GTK_WIDGET_CLASS (panel_widget_parent_class)->focus (widget, 
> > > > direction);
> > > > > > >  }
> > > > > > >  
> > > > > > > -void panel_widget_focus (PanelWidget *panel)
> > > > > > > -{
> > > > > > > -	/*
> > > > > > > -	 * Set the focus back on the panel; we unset the focus child so that
> > > > > > > -	 * the next time focus is inside the panel we do not remember the
> > > > > > > -	 * previously focused child. We also need to set GTK_CAN_FOCUS flag
> > > > > > > -	 * on the panel as it is unset when this function is called.
> > > > > > > -	 */
> > > > > > > -	if (!DRAWER_IS_WIDGET (panel->panel_parent)) {
> > > > > > > -		gtk_container_set_focus_child (GTK_CONTAINER (panel), NULL);
> > > > > > > -		GTK_WIDGET_SET_FLAGS (panel, GTK_CAN_FOCUS);
> > > > > > > -      		gtk_widget_grab_focus (GTK_WIDGET (panel));
> > > > > > > -	}
> > > > > > > -}
> > > > > > > -
> > > > > > >  PanelOrient
> > > > > > >  panel_widget_get_applet_orient (PanelWidget *panel)
> > > > > > >  {
> > > > > > > @@ -3025,13 +2981,11 @@ panel_widget_get_applet_orient (PanelWid
> > > > > > >  	return basep_widget_get_applet_orient (BASEP_WIDGET 
> > > > (panel->panel_parent));
> > > > > > >  }
> > > > > > >  
> > > > > > > -void 
> > > > > > > -panel_widget_save_key_event (PanelWidget *panel,
> > > > > > > -			     GdkEventKey *key_event)
> > > > > > > +static gboolean 
> > > > > > > +panel_widget_popup_panel_menu (PanelWidget *panel)
> > > > > > >  {
> > > > > > > -	if (panel->key_event) {
> > > > > > > -		gdk_event_free ((GdkEvent *)panel->key_event);
> > > > > > > -	}
> > > > > > > -	panel->key_event = (GdkEventKey *) gdk_event_copy ((GdkEvent 
> > > > *)key_event);
> > > > > > > -}
> > > > > > > +	gboolean ret_val;
> > > > > > >  
> > > > > > > +	g_signal_emit_by_name (panel, "popup_menu", &ret_val);
> > > > > > > +	return ret_val;
> > > > > > > +}
> > > > > > > Index: panel-widget.h
> > > > > > > ===================================================================
> > > > > > > RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel-widget.h,v
> > > > > > > retrieving revision 1.138
> > > > > > > diff -u -p -r1.138 panel-widget.h
> > > > > > > --- panel-widget.h	17 Apr 2002 12:52:59 -0000	1.138
> > > > > > > +++ panel-widget.h	14 May 2002 08:14:56 -0000
> > > > > > > @@ -107,7 +107,6 @@ struct _PanelWidget
> > > > > > >  						   was set, this is used
> > > > > > >  						   for tiling onto the
> > > > > > >  						   background */
> > > > > > > -	GdkEventKey		*key_event;
> > > > > > >  };
> > > > > > >  
> > > > > > >  struct _PanelWidgetClass
> > > > > > > @@ -139,6 +138,7 @@ struct _PanelWidgetClass
> > > > > > >  	void (* tab_move) (PanelWidget	*panel,
> > > > > > >                             gboolean	 next);
> > > > > > >  	void (* end_move) (PanelWidget	*panel);
> > > > > > > +	gboolean (* popup_panel_menu) (PanelWidget	*panel);
> > > > > > >  
> > > > > > >  };
> > > > > > >  
> > > > > > > Index: panel.c
> > > > > > > ===================================================================
> > > > > > > RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel.c,v
> > > > > > > retrieving revision 1.468
> > > > > > > diff -u -p -r1.468 panel.c
> > > > > > > --- panel.c	18 Apr 2002 13:43:39 -0000	1.468
> > > > > > > +++ panel.c	14 May 2002 08:14:57 -0000
> > > > > > > @@ -808,9 +808,6 @@ panel_end_move (GtkWidget *widget, GdkEv
> > > > > > >  			g_source_remove (panel_dragged_timeout);
> > > > > > >  		panel_dragged_timeout = 0;
> > > > > > >  		panel_been_moved = FALSE;
> > > > > > > -		if (pointer_in_widget (basep->panel, bevent) &&
> > > > > > > -		    ! gtk_widget_is_focus (basep->panel))
> > > > > > > -			panel_widget_focus (PANEL_WIDGET (basep->panel));
> > > > > > >  
> > > > > > >  		/* FIXME: why is this neccessary!!!!???? */
> > > > > > >  		gtk_container_foreach (GTK_CONTAINER (basep->panel),
> > > > > > > @@ -829,6 +826,9 @@ panel_event(GtkWidget *widget, GdkEvent 
> > > > > > >  	PanelWidget *panel = NULL;
> > > > > > >  	BasePWidget *basep = NULL;
> > > > > > >  	GdkEventButton *bevent;
> > > > > > > +	GdkEventKey *kevent;
> > > > > > > +	GdkEventFocus *fevent;
> > > > > > > +	GtkStateType state;
> > > > > > >  	int x, y;
> > > > > > >  
> > > > > > >  	if (BASEP_IS_WIDGET (widget)) {
> > > > > > > @@ -884,6 +884,22 @@ panel_event(GtkWidget *widget, GdkEvent 
> > > > > > >  			}
> > > > > > >  		}
> > > > > > >  		break;
> > > > > > > +	case GDK_KEY_PRESS:
> > > > > > > +		kevent = (GdkEventKey *)event;
> > > > > > > +		if (GTK_IS_SOCKET (GTK_WINDOW (widget)->focus_widget)) {
> > > > > > > +			/*
> > > > > > > +		  	 * If the focus widget is a GtkSocket, i.e. the
> > > > > > > +			 * focus is in an applet in another widget, then key 
> > > > > > > +			 * bindings do not work. We get around this by
> > > > > > > +			 * activating the key bindings here.
> > > > > > > +			 */ 
> > > > > > > +			return gtk_bindings_activate (GTK_OBJECT (panel), 
> > > > kevent->keyval, kevent->state);
> > > > > > > +		}
> > > > > > > +		break;
> > > > > > > +	case GDK_FOCUS_CHANGE:
> > > > > > > +		fevent = (GdkEventFocus *)event;
> > > > > > > +		state = (fevent->in) ? GTK_STATE_SELECTED : GTK_STATE_NORMAL;
> > > > > > > +		gtk_widget_set_state (GTK_WIDGET (panel), state);
> > > > > > >  
> > > > > > >  	default:
> > > > > > >  		break;
> > > > > > > Index: panelrc
> > > > > > > ===================================================================
> > > > > > > RCS file: panelrc
> > > > > > > diff -N panelrc
> > > > > > > --- /dev/null	1 Jan 1970 00:00:00 -0000
> > > > > > > +++ panelrc	14 May 2002 08:14:57 -0000
> > > > > > > @@ -0,0 +1,8 @@
> > > > > > > +style "panel-style"
> > > > > > > +{
> > > > > > > +  fg[SELECTED] = { 0, 0, 0 }
> > > > > > > +  bg[SELECTED] = { 0xd6d6, 0xd6d6, 0xd6d6 }
> > > > > > > +}
> > > > > > > +
> > > > > > > +widget "*PanelWidget*" style : application "panel-style"
> > > > > > > +widget "*PanelApplet*" style : application "panel-style"
> > > > > > > 
> > > > > > > ____________________________________________________________________
> > > > > > > 
> > > > > > > Index: ChangeLog
> > > > > > > ===================================================================
> > > > > > > RCS file: /cvs/gnome/gnome-panel/libpanel-applet/ChangeLog,v
> > > > > > > retrieving revision 1.62
> > > > > > > diff -u -p -r1.62 ChangeLog
> > > > > > > --- ChangeLog	13 May 2002 12:30:33 -0000	1.62
> > > > > > > +++ ChangeLog	14 May 2002 08:18:35 -0000
> > > > > > > @@ -1,3 +1,18 @@
> > > > > > > +2002-05-14  Padraig O'Briain <padraig obriain sun com>
> > > > > > > +
> > > > > > > +	* Makefile.am:
> > > > > > > +	Add definiition for PANELRC
> > > > > > > +
> > > > > > > +	* panel-applet.c
> > > > > > > +	Add function panel_applet_add_default_rcfile()
> > > > > > > +	(panel_applet_expose): Use style's focus-line-width and
> > > > > > > +	focus-padding when drawing focus indicator.
> > > > > > > +
> > > > > > > +	* panel-applet.h:
> > > > > > > +	Add call to panel_applet_add_default_rcfile()  to
> > > > > > > +	PANEL_APPLET_BONOBO_FACTORY macro so applets will show SELECTED state
> > > > > > > +	as NORMAL, by default. 
> > > > > > > +
> > > > > > >  2002-05-13  Arvind Samptur   <arvind samptur wipro com>
> > > > > > >  	* panel-applet.c: (panel_applet_button_press)
> > > > > > >  	stopped the propogation of the left click on applet
> > > > > > > Index: Makefile.am
> > > > > > > ===================================================================
> > > > > > > RCS file: /cvs/gnome/gnome-panel/libpanel-applet/Makefile.am,v
> > > > > > > retrieving revision 1.12
> > > > > > > diff -u -p -r1.12 Makefile.am
> > > > > > > --- Makefile.am	21 Mar 2002 13:48:08 -0000	1.12
> > > > > > > +++ Makefile.am	14 May 2002 08:18:35 -0000
> > > > > > > @@ -13,6 +13,7 @@ INCLUDES =							
> > > > \
> > > > > > >  	-DPANEL_APPLET_DATADIR=\""$(datadir)"\"			\
> > > > > > >  	-DPANEL_APPLET_GLADEDIR=\""$(gladedir)"\"		\
> > > > > > >  	-DGNOMELOCALEDIR=\""$(datadir)/locale"\"		\
> > > > > > > +	-DPANELRC=\""$(datadir)/gnome-panel/panelrc"\"		\
> > > > > > >  	$(LIBPANEL_APPLET_CFLAGS)				\
> > > > > > >  	$(WARN_CFLAGS)
> > > > > > >  
> > > > > > > Index: panel-applet.c
> > > > > > > ===================================================================
> > > > > > > RCS file: /cvs/gnome/gnome-panel/libpanel-applet/panel-applet.c,v
> > > > > > > retrieving revision 1.56
> > > > > > > diff -u -p -r1.56 panel-applet.c
> > > > > > > --- panel-applet.c	13 May 2002 12:30:33 -0000	1.56
> > > > > > > +++ panel-applet.c	14 May 2002 08:18:35 -0000
> > > > > > > @@ -489,15 +489,24 @@ panel_applet_expose (GtkWidget      *wid
> > > > > > >  
> > > > > > >  	GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event);
> > > > > > >  
> > > > > > > -        if (GTK_WIDGET_HAS_FOCUS (widget))
> > > > > > > +        if (GTK_WIDGET_HAS_FOCUS (widget)) {
> > > > > > > +		gint focus_width, focus_pad;
> > > > > > > +		gint x, y, width, height;
> > > > > > > +
> > > > > > > +		gtk_widget_style_get (widget,
> > > > > > > +				      "focus-line-width", &focus_width,
> > > > > > > +				      "focus-padding", &focus_pad,
> > > > > > > +				      NULL);
> > > > > > > +		x = widget->allocation.x;
> > > > > > > +		y = widget->allocation.y;
> > > > > > > +		width = widget->allocation.width - (focus_width + focus_pad);
> > > > > > > +		height = widget->allocation.height - (focus_width + focus_pad);
> > > > > > > +
> > > > > > >  		gtk_paint_focus (widget->style, widget->window,
> > > > > > >                                   GTK_WIDGET_STATE (widget),
> > > > > > >                                   &event->area, widget, "panel_applet",
> > > > > > > -                                 widget->allocation.x + 1,
> > > > > > > -                                 widget->allocation.y + 1,
> > > > > > > -                                 widget->allocation.width - 3,
> > > > > > > -                                 widget->allocation.height - 3);
> > > > > > > -
> > > > > > > +                                 x, y, width, height);
> > > > > > > +	}
> > > > > > >  	return FALSE;
> > > > > > >  }                
> > > > > > >  
> > > > > > > @@ -1484,4 +1493,10 @@ panel_applet_shlib_factory (const char  
> > > > > > >  			g_cclosure_new (G_CALLBACK (callback),
> > > > > > >  					user_data, NULL),
> > > > > > >  			ev);
> > > > > > > +}
> > > > > > > +
> > > > > > > +void
> > > > > > > +panel_applet_add_default_rcfile (void)
> > > > > > > +{
> > > > > > > +        gtk_rc_add_default_file (PANELRC);
> > > > > > >  }
> > > > > > > Index: panel-applet.h
> > > > > > > ===================================================================
> > > > > > > RCS file: /cvs/gnome/gnome-panel/libpanel-applet/panel-applet.h,v
> > > > > > > retrieving revision 1.32
> > > > > > > diff -u -p -r1.32 panel-applet.h
> > > > > > > --- panel-applet.h	17 Apr 2002 14:12:50 -0000	1.32
> > > > > > > +++ panel-applet.h	14 May 2002 08:18:35 -0000
> > > > > > > @@ -165,6 +165,8 @@ Bonobo_Unknown	   panel_applet_shlib_fac
> > > > > > >  						       GClosure                  
> > > >  *closure,
> > > > > > >  						       CORBA_Environment         
> > > >  *ev);
> > > > > > >  
> > > > > > > +void              panel_applet_add_default_rcfile     (void);
> > > > > > > +
> > > > > > >  /*
> > > > > > >   * These macros are getting a bit unwieldy.
> > > > > > >   *
> > > > > > > @@ -180,6 +182,7 @@ int main (int argc, char *argv [])						
> > > > > > >  	bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);			
> > > > \
> > > > > > >  	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");			
> > > > \
> > > > > > >  	textdomain (GETTEXT_PACKAGE);						
> > > > \
> > > > > > > +        panel_applet_add_default_rcfile ();					
> > > > \
> > > > > > >  	gnome_program_init (name, version,					
> > > > \
> > > > > > >  			    LIBGNOMEUI_MODULE,					
> > > > \
> > > > > > >  			    argc, argv,						
> > > > \
> > > > > > > @@ -194,6 +197,7 @@ int main (int argc, char *argv [])						
> > > > > > >  	bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);			
> > > > \
> > > > > > >  	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");			
> > > > \
> > > > > > >  	textdomain (GETTEXT_PACKAGE);						
> > > > \
> > > > > > > +        panel_applet_add_default_rcfile ();					
> > > > \
> > > > > > >  	gnome_program_init (name, version,					
> > > > \
> > > > > > >  			    LIBGNOMEUI_MODULE,					
> > > > \
> > > > > > >  			    argc, argv,						
> > > > \
> > > > > > _______________________________________________
> > > > > > desktop-devel-list mailing list
> > > > > > desktop-devel-list gnome org
> > > > > > http://mail.gnome.org/mailman/listinfo/desktop-devel-list
> > > > > 
> > > > > 
> > > > > _______________________________________________
> > > > > gnome-accessibility-list mailing list
> > > > > gnome-accessibility-list gnome org
> > > > > http://mail.gnome.org/mailman/listinfo/gnome-accessibility-list
> > > > 
> > > > _______________________________________________
> > > > gnome-accessibility-list mailing list
> > > > gnome-accessibility-list gnome org
> > > > http://mail.gnome.org/mailman/listinfo/gnome-accessibility-list
> > > 
> > > 
> > 
> > 
> 
> 





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