GNOME Bugzilla – Bug 153965
"Instant Open" Drawer
Last modified: 2015-03-24 13:00:56 UTC
On the small screen (1024*768) of my laptop 4 desktops in the panel take up to much space. That is way I added a drawer with the switcher applett. Now I got the idea that it'd make life a lot easier, if I had a preference for the drawer that it opens right on having the mouse on top of the drawer. That way I could trough my mouse into the bottom right corner and switch the desktop easily. The important part is, that the drawer vanishes again shortly after leaving it with the mouse. I believe that this behaviour will also be useful in other scenarios.
Just got this idea: drawers that have auto-hide option set are currently broken. But they should work like what you're describing.
So this bug is about auto-closing the drawer when you click on something else, like normal menus do?
Well, a auto-hide option as Vincent points out, is, what I'm looking for...it's not about clicking someting else, but about the cursor being outside of the drawer for some time. I am however not quite sure, if an autohide would also include the poping up on hovering the drawer icon.
2.14.x milestone.
will try to work on this one on the next days.As suggested im going to do a drawer option for autopopup on mouseover and a autohide feature.
Well after trying to implement something today i came with one decision that i might take, so its better ask the "pros" for a suggestion instead of start doing things myself and get rejected =(. On the current implementation, drawer properties window is just a panel properties window, to add a new feature on it i would have to mess with the default panel properties interface(the glade file), of course i can hide the new options and only show them when needed(in case of opening the drawer properties), what i tough today is changing from the panel interface to a drawer interface by itself, i think it would be more organized and wont mess with another components when changing only drawer properties dialog. I will need to have two new checkboxes on it, thats what i tough that, the checkboxes will be "Auto Popup" to a mouse over new popup feature and "Auto Hide" to auto hide the drawer after a few seconds..maybe a input box for the seconds or a rollover. Suggestions?
Romulo: well, the idea is to use the "auto hide" checkbox for those two settings. We don't want two checkboxes here. So no need to create a new interface for the drawer properties (yet). You would only need to not hide this checkbox for drawers, and change its label.
Created attachment 61660 [details] [review] Patch for autopopup and hide features of the drawer
Comment on attachment 61660 [details] [review] Patch for autopopup and hide features of the drawer Index: gnome-panel/drawer.c =================================================================== RCS file: /cvs/gnome/gnome-panel/gnome-panel/drawer.c,v retrieving revision 1.199 diff -u -r1.199 drawer.c --- gnome-panel/drawer.c 24 Oct 2005 06:04:01 -0000 1.199 +++ gnome-panel/drawer.c 21 Mar 2006 02:43:41 -0000 @@ -33,6 +33,9 @@ static void drawer_click (GtkWidget *w, Drawer *drawer) { + if (panel_toplevel_get_auto_hide (drawer->toplevel)) + panel_toplevel_hide (drawer->toplevel, FALSE, -1); + else if (!panel_toplevel_get_is_hidden (drawer->toplevel)) panel_toplevel_hide (drawer->toplevel, FALSE, -1); else @@ -40,6 +43,17 @@ } static void +drawer_mouseover (GtkWidget *w, Drawer *drawer) +{ + if (panel_toplevel_get_is_hidden (drawer->toplevel)&& + panel_toplevel_get_auto_hide (drawer->toplevel)) + { + panel_toplevel_unhide (drawer->toplevel); + panel_toplevel_set_drawer_autohide (drawer->toplevel); + } +} + +static void toplevel_destroyed (GtkWidget *widget, Drawer *drawer) { @@ -362,8 +376,9 @@ G_CALLBACK (drag_leave_cb), drawer); g_signal_connect (drawer->button, "drag_drop", G_CALLBACK (drag_drop_cb), drawer); - - g_signal_connect (drawer->button, "clicked", + g_signal_connect (drawer->button, "enter", + G_CALLBACK (drawer_mouseover), drawer); + g_signal_connect (drawer->button, "clicked", G_CALLBACK (drawer_click), drawer); g_signal_connect (drawer->button, "destroy", G_CALLBACK (destroy_drawer), drawer); @@ -409,6 +424,7 @@ panel_profile_set_toplevel_enable_buttons (toplevel, TRUE); panel_profile_set_toplevel_enable_arrows (toplevel, TRUE); + panel_profile_set_toplevel_auto_hide (toplevel, TRUE); return toplevel; } @@ -646,7 +662,7 @@ key = panel_gconf_full_key (PANEL_GCONF_TOPLEVELS, toplevel_id, "enable_arrows"); gconf_client_set_bool (client, key, TRUE, NULL); - + *attached_toplevel_id = toplevel_id; } } @@ -756,7 +772,10 @@ button_widget_get_icon_name (BUTTON_WIDGET (drawer->button))); GTK_WIDGET_SET_FLAGS (drawer->button, GTK_NO_WINDOW); - + + //Set Drawer + panel_toplevel_set_enable_drawer (drawer->toplevel); + } else gtk_drag_source_unset (drawer->button); } Index: gnome-panel/panel-properties-dialog.c =================================================================== RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel-properties-dialog.c,v retrieving revision 1.37 diff -u -r1.37 panel-properties-dialog.c --- gnome-panel/panel-properties-dialog.c 22 Jan 2006 15:01:31 -0000 1.37 +++ gnome-panel/panel-properties-dialog.c 21 Mar 2006 02:43:42 -0000 @@ -906,13 +906,34 @@ } static void +panel_properties_dialog_remove_expand (PanelPropertiesDialog *dialog) +{ + GtkContainer *container = GTK_CONTAINER (dialog->general_vbox); + + gtk_container_remove (container, dialog->expand_toggle); + + dialog->expand_toggle = NULL; +} + +static void +panel_properties_dialog_rename_autohide (PanelPropertiesDialog *dialog) +{ + gtk_button_set_label (dialog->autohide_toggle, "Auto Popup"); +} + +static void panel_properties_dialog_update_for_attached (PanelPropertiesDialog *dialog, - gboolean attached) + gboolean attached, gboolean drawer) { if (!attached) panel_properties_dialog_remove_icon_entry (dialog); else { - panel_properties_dialog_remove_toggles (dialog); + if ( drawer ) { + panel_properties_dialog_remove_expand (dialog); + panel_properties_dialog_rename_autohide (dialog); + } + else + panel_properties_dialog_remove_toggles (dialog); panel_properties_dialog_remove_orientation_combo (dialog); } } @@ -981,7 +1002,8 @@ dialog); panel_properties_dialog_update_for_attached (dialog, - panel_toplevel_get_is_attached (dialog->toplevel)); + panel_toplevel_get_is_attached (dialog->toplevel), + panel_toplevel_get_enable_drawer (dialog->toplevel)); panel_toplevel_push_autohide_disabler (dialog->toplevel); panel_widget_register_open_dialog (panel_toplevel_get_panel_widget (dialog->toplevel), Index: gnome-panel/panel-toplevel.c =================================================================== RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel-toplevel.c,v retrieving revision 1.94 diff -u -r1.94 panel-toplevel.c --- gnome-panel/panel-toplevel.c 6 Mar 2006 20:19:20 -0000 1.94 +++ gnome-panel/panel-toplevel.c 21 Mar 2006 02:43:44 -0000 @@ -146,6 +146,7 @@ guint animate : 1; guint buttons_enabled : 1; guint arrows_enabled : 1; + guint drawer : 1; /* The co-ordinates are relative to center screen */ guint x_centered : 1; @@ -3198,7 +3199,7 @@ if (toplevel->priv->state != PANEL_STATE_NORMAL) return; - + g_signal_emit (toplevel, toplevel_signals [HIDE_SIGNAL], 0); if (toplevel->priv->attach_toplevel) @@ -3265,10 +3266,16 @@ if (toplevel->priv->animating) return TRUE; - panel_toplevel_hide (toplevel, TRUE, -1); + /* FIXME: + * A little hack for drawers, actually the auto hide + * feature doesnt work well with drawers as "auto_hide" + * so i used this hack to pass FALSE if drawer to + * make it work. Needs a better workaround + */ + panel_toplevel_hide (toplevel, !toplevel->priv->drawer, -1); toplevel->priv->hide_timeout = 0; - + return FALSE; } @@ -3341,7 +3348,7 @@ if (toplevel->priv->hide_timeout || toplevel->priv->state != PANEL_STATE_NORMAL) return; - + if (toplevel->priv->hide_delay > 0) toplevel->priv->hide_timeout = g_timeout_add (toplevel->priv->hide_delay, @@ -3407,10 +3414,10 @@ g_return_val_if_fail (PANEL_IS_TOPLEVEL (widget), FALSE); toplevel = PANEL_TOPLEVEL (widget); - + if (toplevel->priv->auto_hide && event->detail != GDK_NOTIFY_INFERIOR) panel_toplevel_queue_auto_hide (toplevel); - + if (GTK_WIDGET_CLASS (parent_class)->leave_notify_event) return GTK_WIDGET_CLASS (parent_class)->leave_notify_event (widget, event); @@ -4175,6 +4182,7 @@ toplevel->priv->attached = FALSE; toplevel->priv->attach_hidden = FALSE; toplevel->priv->updated_geometry_initial = FALSE; + toplevel->priv->drawer = FALSE; gtk_widget_add_events (GTK_WIDGET (toplevel), GDK_BUTTON_PRESS_MASK | @@ -4839,4 +4847,32 @@ { return calculate_minimum_height (GTK_WIDGET (toplevel), toplevel->priv->orientation); +} + +void +panel_toplevel_set_drawer_autohide (PanelToplevel *toplevel) +{ + if (toplevel->priv->hide_delay > 0) + toplevel->priv->hide_timeout = + g_timeout_add (toplevel->priv->hide_delay, + (GSourceFunc) panel_toplevel_auto_hide_timeout_handler, + toplevel); + else + toplevel->priv->hide_timeout = + g_idle_add ((GSourceFunc) panel_toplevel_auto_hide_timeout_handler, + toplevel); +} + +void +panel_toplevel_set_enable_drawer (PanelToplevel *toplevel) +{ + toplevel->priv->drawer = TRUE; +} + +gboolean +panel_toplevel_get_enable_drawer (PanelToplevel *toplevel) +{ + g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), FALSE); + + return toplevel->priv->drawer; } Index: gnome-panel/panel-toplevel.h =================================================================== RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel-toplevel.h,v retrieving revision 1.10 diff -u -r1.10 panel-toplevel.h --- gnome-panel/panel-toplevel.h 28 Mar 2005 10:14:05 -0000 1.10 +++ gnome-panel/panel-toplevel.h 21 Mar 2006 02:43:44 -0000 @@ -164,6 +164,11 @@ int panel_toplevel_get_minimum_size (PanelToplevel *toplevel); GSList *panel_toplevel_list_toplevels (void); +void panel_toplevel_set_drawer_autohide (PanelToplevel *toplevel); +void panel_toplevel_set_enable_drawer (PanelToplevel *toplevel); +gboolean panel_toplevel_get_enable_drawer (PanelToplevel *toplevel); + + G_END_DECLS #endif /* __PANEL_TOPLEVEL_H__ */
Small comments: + please use "cvs diff -up" (put it in your ~/.cvsrc) + no need to put the patch in a comment + do not change empty lines or spacing, it only adds noise to the patch + you don't need a new "drawer" property for the toplevel: it already exists with the name "attached" + I'm not sure about the new panel_toplevel_set_drawer_autohide(), but if we need it, it should live in drawer.c, not toplevel.c If you can attach a new patch with the first four items fixed, it will really make it easier for me to review :-) Thanks
Created attachment 61702 [details] [review] should work now, patch for autopopup, fixed.
Comment on attachment 61702 [details] [review] should work now, patch for autopopup, fixed. Here are some comments: >Index: gnome-panel/drawer.c >=================================================================== >RCS file: /cvs/gnome/gnome-panel/gnome-panel/drawer.c,v >retrieving revision 1.199 >diff -u -p -B -r1.199 drawer.c >--- gnome-panel/drawer.c 24 Oct 2005 06:04:01 -0000 1.199 >+++ gnome-panel/drawer.c 21 Mar 2006 16:45:42 -0000 >@@ -33,6 +33,9 @@ > static void > drawer_click (GtkWidget *w, Drawer *drawer) > { >+ if (panel_toplevel_get_auto_hide (drawer->toplevel)) >+ panel_toplevel_hide (drawer->toplevel, FALSE, -1); >+ else > if (!panel_toplevel_get_is_hidden (drawer->toplevel)) > panel_toplevel_hide (drawer->toplevel, FALSE, -1); > else Why are you changing this function? (It might make sense, but I can't find out why right now). >@@ -40,6 +43,17 @@ drawer_click (GtkWidget *w, Drawer *draw > } > > static void >+drawer_mouseover (GtkWidget *w, Drawer *drawer) >+{ >+ if (panel_toplevel_get_is_hidden (drawer->toplevel)&& >+ panel_toplevel_get_auto_hide (drawer->toplevel)) >+ { Small comments on the form: it should be: if (panel_toplevel_get_is_hidden (drawer->toplevel) && if (panel_toplevel_get_is_hidden (drawer->toplevel) { >+ panel_toplevel_unhide (drawer->toplevel); >+ panel_toplevel_set_drawer_autohide (drawer->toplevel); You shouldn't do this, but call panel_toplevel_queue_auto_unhide() >+ } >+} >+ >+static void > toplevel_destroyed (GtkWidget *widget, > Drawer *drawer) > { >@@ -363,6 +377,8 @@ create_drawer_applet (PanelToplevel * > g_signal_connect (drawer->button, "drag_drop", > G_CALLBACK (drag_drop_cb), drawer); > >+ g_signal_connect (drawer->button, "enter", >+ G_CALLBACK (drawer_mouseover), drawer); > g_signal_connect (drawer->button, "clicked", > G_CALLBACK (drawer_click), drawer); > g_signal_connect (drawer->button, "destroy", >@@ -409,6 +425,7 @@ create_drawer_toplevel (const char *draw > > panel_profile_set_toplevel_enable_buttons (toplevel, TRUE); > panel_profile_set_toplevel_enable_arrows (toplevel, TRUE); >+ panel_profile_set_toplevel_auto_hide (toplevel, TRUE); This shouldn't be the default, IMHO. > return toplevel; > } >Index: gnome-panel/panel-properties-dialog.c >=================================================================== >RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel-properties-dialog.c,v >retrieving revision 1.37 >diff -u -p -B -r1.37 panel-properties-dialog.c >--- gnome-panel/panel-properties-dialog.c 22 Jan 2006 15:01:31 -0000 1.37 >+++ gnome-panel/panel-properties-dialog.c 21 Mar 2006 16:46:04 -0000 >@@ -912,7 +912,8 @@ panel_properties_dialog_update_for_attac > if (!attached) > panel_properties_dialog_remove_icon_entry (dialog); > else { >- panel_properties_dialog_remove_toggles (dialog); >+ panel_properties_dialog_remove_expand (dialog); >+ panel_properties_dialog_rename_autohide (dialog); panel_properties_dialog_remove_toggles() is now unused. You should remove it. > panel_properties_dialog_remove_orientation_combo (dialog); > } > } >@@ -1025,4 +1026,21 @@ panel_properties_dialog_present (PanelTo > dialog = panel_properties_dialog_new (toplevel, gui); > > g_object_unref (gui); >+} >+ >+static void >+panel_properties_dialog_remove_expand (PanelPropertiesDialog *dialog) >+{ >+ GtkContainer *container = GTK_CONTAINER (dialog->general_vbox); >+ >+ gtk_container_remove (container, dialog->expand_toggle); >+ >+ dialog->expand_toggle = NULL; >+} >+ >+ >+static void >+panel_properties_dialog_rename_autohide (PanelPropertiesDialog *dialog) >+{ >+ gtk_button_set_label (dialog->autohide_toggle, "Auto Popup"); You want to translate this. And I don't like your string :-) So, what about _("Automatically show drawer") ? > } Those two functions should be above panel_properties_dialog_update_for_attac(), where panel_properties_dialog_remove_toggles() was. >Index: gnome-panel/panel-toplevel.c >=================================================================== >RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel-toplevel.c,v >retrieving revision 1.94 >diff -u -p -B -r1.94 panel-toplevel.c >--- gnome-panel/panel-toplevel.c 6 Mar 2006 20:19:20 -0000 1.94 >+++ gnome-panel/panel-toplevel.c 21 Mar 2006 16:46:11 -0000 >@@ -3265,7 +3265,13 @@ panel_toplevel_auto_hide_timeout_handler > if (toplevel->priv->animating) > return TRUE; > >- panel_toplevel_hide (toplevel, TRUE, -1); >+ /* FIXME: >+ * A little hack for drawers, actually the auto hide >+ * feature doesnt work well with drawers as "auto_hide" >+ * so i used this hack to pass FALSE if drawer to >+ * make it work. Needs a better workaround >+ */ >+ panel_toplevel_hide (toplevel, !toplevel->priv->attached, -1); So, what about fixing the panel_toplevel_hide() function to do the right thing with auto_hide when it's a drawer? :-) >@@ -4839,4 +4845,18 @@ panel_toplevel_get_minimum_size (PanelTo > { > return calculate_minimum_height (GTK_WIDGET (toplevel), > toplevel->priv->orientation); >+} >+ >+void >+panel_toplevel_set_drawer_autohide (PanelToplevel *toplevel) >+{ >+ if (toplevel->priv->hide_delay > 0) >+ toplevel->priv->hide_timeout = >+ g_timeout_add (toplevel->priv->hide_delay, >+ (GSourceFunc) panel_toplevel_auto_hide_timeout_handler, >+ toplevel); >+ else >+ toplevel->priv->hide_timeout = >+ g_idle_add ((GSourceFunc) panel_toplevel_auto_hide_timeout_handler, >+ toplevel); > } panel_toplevel_set_drawer_autohide() should be useless with panel_toplevel_queue_auto_unhide(). >Index: gnome-panel/panel-toplevel.h >=================================================================== >RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel-toplevel.h,v >retrieving revision 1.10 >diff -u -p -B -r1.10 panel-toplevel.h >--- gnome-panel/panel-toplevel.h 28 Mar 2005 10:14:05 -0000 1.10 >+++ gnome-panel/panel-toplevel.h 21 Mar 2006 16:46:11 -0000 >@@ -116,6 +116,7 @@ void panel_toplevel_rota > void panel_toplevel_attach_to_widget (PanelToplevel *toplevel, > PanelToplevel *attach_toplevel, > GtkWidget *attach_widget); >+void panel_toplevel_set_drawer_autohide (PanelToplevel *toplevel); > void panel_toplevel_detach (PanelToplevel *toplevel); > gboolean panel_toplevel_get_is_attached (PanelToplevel *toplevel); > PanelToplevel *panel_toplevel_get_attach_toplevel (PanelToplevel *toplevel); Ditto, useless.
>Index: gnome-panel/drawer.c >=================================================================== >RCS file: /cvs/gnome/gnome-panel/gnome-panel/drawer.c,v >retrieving revision 1.199 >diff -u -p -B -r1.199 drawer.c >--- gnome-panel/drawer.c 24 Oct 2005 06:04:01 -0000 1.199 >+++ gnome-panel/drawer.c 21 Mar 2006 16:45:42 -0000 >@@ -33,6 +33,9 @@ > static void > drawer_click (GtkWidget *w, Drawer *drawer) > { >+ if (panel_toplevel_get_auto_hide (drawer->toplevel)) >+ panel_toplevel_hide (drawer->toplevel, FALSE, -1); >+ else > if (!panel_toplevel_get_is_hidden (drawer->toplevel)) > panel_toplevel_hide (drawer->toplevel, FALSE, -1); > else >Why are you changing this function? (It might make sense, but I can't find out >why right now). changing it because i want to hide the panel when clicking on the drawer, and only that, to open it, just mouseover it. >@@ -40,6 +43,17 @@ drawer_click (GtkWidget *w, Drawer *draw > } > > static void >+drawer_mouseover (GtkWidget *w, Drawer *drawer) >+{ >+ if (panel_toplevel_get_is_hidden (drawer->toplevel)&& >+ panel_toplevel_get_auto_hide (drawer->toplevel)) >+ { >Small comments on the form: it should be: >if (panel_toplevel_get_is_hidden (drawer->toplevel) && > if (panel_toplevel_get_is_hidden (drawer->toplevel) { no it shouldnt. I planned if the widget is hidden and it is with auto_hide(the autopopup feature) on, it should show it. >+ panel_toplevel_unhide (drawer->toplevel); >+ panel_toplevel_set_drawer_autohide (drawer->toplevel); >You shouldn't do this, but call panel_toplevel_queue_auto_unhide() I dont want to unhide it, i want to set a timer for it to autohide. >+ } >+} >+ >+static void > toplevel_destroyed (GtkWidget *widget, > Drawer *drawer) > { >@@ -363,6 +377,8 @@ create_drawer_applet (PanelToplevel * > g_signal_connect (drawer->button, "drag_drop", > G_CALLBACK (drag_drop_cb), drawer); > >+ g_signal_connect (drawer->button, "enter", >+ G_CALLBACK (drawer_mouseover), drawer); > g_signal_connect (drawer->button, "clicked", > G_CALLBACK (drawer_click), drawer); > g_signal_connect (drawer->button, "destroy", >@@ -409,6 +425,7 @@ create_drawer_toplevel (const char *draw > > panel_profile_set_toplevel_enable_buttons (toplevel, TRUE); > panel_profile_set_toplevel_enable_arrows (toplevel, TRUE); >+ panel_profile_set_toplevel_auto_hide (toplevel, TRUE); >This shouldn't be the default, IMHO. ok. > return toplevel; > } >Index: gnome-panel/panel-properties-dialog.c >=================================================================== >RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel-properties-dialog.c,v >retrieving revision 1.37 >diff -u -p -B -r1.37 panel-properties-dialog.c >--- gnome-panel/panel-properties-dialog.c 22 Jan 2006 15:01:31 -0000 1.37 >+++ gnome-panel/panel-properties-dialog.c 21 Mar 2006 16:46:04 -0000 >@@ -912,7 +912,8 @@ panel_properties_dialog_update_for_attac > if (!attached) > panel_properties_dialog_remove_icon_entry (dialog); > else { >- panel_properties_dialog_remove_toggles (dialog); >+ panel_properties_dialog_remove_expand (dialog); >+ panel_properties_dialog_rename_autohide (dialog); >panel_properties_dialog_remove_toggles() is now unused. You should remove it. ok > panel_properties_dialog_remove_orientation_combo (dialog); > } > } >@@ -1025,4 +1026,21 @@ panel_properties_dialog_present (PanelTo > dialog = panel_properties_dialog_new (toplevel, gui); > > g_object_unref (gui); >+} >+ >+static void >+panel_properties_dialog_remove_expand (PanelPropertiesDialog *dialog) >+{ >+ GtkContainer *container = GTK_CONTAINER (dialog->general_vbox); >+ >+ gtk_container_remove (container, dialog->expand_toggle); >+ >+ dialog->expand_toggle = NULL; >+} >+ >+ >+static void >+panel_properties_dialog_rename_autohide (PanelPropertiesDialog *dialog) >+{ >+ gtk_button_set_label (dialog->autohide_toggle, "Auto Popup"); >You want to translate this. And I don't like your string :-) So, what about >_("Automatically show drawer") ? ok. > } Those two functions should be above panel_properties_dialog_update_for_attac(), where panel_properties_dialog_remove_toggles() was. >Index: gnome-panel/panel-toplevel.c >=================================================================== >RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel-toplevel.c,v >retrieving revision 1.94 >diff -u -p -B -r1.94 panel-toplevel.c >--- gnome-panel/panel-toplevel.c 6 Mar 2006 20:19:20 -0000 1.94 >+++ gnome-panel/panel-toplevel.c 21 Mar 2006 16:46:11 -0000 >@@ -3265,7 +3265,13 @@ panel_toplevel_auto_hide_timeout_handler > if (toplevel->priv->animating) > return TRUE; > >- panel_toplevel_hide (toplevel, TRUE, -1); >+ /* FIXME: >+ * A little hack for drawers, actually the auto hide >+ * feature doesnt work well with drawers as "auto_hide" >+ * so i used this hack to pass FALSE if drawer to >+ * make it work. Needs a better workaround >+ */ >+ panel_toplevel_hide (toplevel, !toplevel->priv->attached, -1); >So, what about fixing the panel_toplevel_hide() function to do the right thing >with auto_hide when it's a drawer? :-) yeah, more smart i think. >@@ -4839,4 +4845,18 @@ panel_toplevel_get_minimum_size (PanelTo > { > return calculate_minimum_height (GTK_WIDGET (toplevel), > toplevel->priv->orientation); >+} >+ >+void >+panel_toplevel_set_drawer_autohide (PanelToplevel *toplevel) >+{ >+ if (toplevel->priv->hide_delay > 0) >+ toplevel->priv->hide_timeout = >+ g_timeout_add (toplevel->priv->hide_delay, >+ (GSourceFunc) panel_toplevel_auto_hide_timeout_handler, >+ toplevel); >+ else >+ toplevel->priv->hide_timeout = >+ g_idle_add ((GSourceFunc) panel_toplevel_auto_hide_timeout_handler, >+ toplevel); > } >panel_toplevel_set_drawer_autohide() should be useless with >panel_toplevel_queue_auto_unhide(). explained before. I remade this function because it doesnt make all the checks like the other one, i can change the other one if is the case, but this way is really needed. >Index: gnome-panel/panel-toplevel.h >=================================================================== >RCS file: /cvs/gnome/gnome-panel/gnome-panel/panel-toplevel.h,v >retrieving revision 1.10 >diff -u -p -B -r1.10 panel-toplevel.h >--- gnome-panel/panel-toplevel.h 28 Mar 2005 10:14:05 -0000 1.10 >+++ gnome-panel/panel-toplevel.h 21 Mar 2006 16:46:11 -0000 >@@ -116,6 +116,7 @@ void panel_toplevel_rota > void panel_toplevel_attach_to_widget (PanelToplevel *toplevel, > PanelToplevel *attach_toplevel, > GtkWidget *attach_widget); >+void panel_toplevel_set_drawer_autohide (PanelToplevel *toplevel); > void panel_toplevel_detach (PanelToplevel *toplevel); > gboolean panel_toplevel_get_is_attached (PanelToplevel *toplevel); > PanelToplevel *panel_toplevel_get_attach_toplevel (PanelToplevel *toplevel); >Ditto, useless. said before. hmm better we discuss that by email dont you think? i barely find you on the channel so a mail discussion would be better...so we could reach a acceptable level for this patch and all fixes/features.
*** Bug 335578 has been marked as a duplicate of this bug. ***
Created attachment 61965 [details] [review] new patch the new patch with everything vuntz asked me to fix and some discussion we had at irc ;)
requesting some look over here...submited this patch a long time ago and im still waiting
Vincent? Does the latest patch address all your concerns?
I tried the patch - it applies _almost_ cleanly, works _almost_ well :) I think that the drawer should stay open if mouse pointer is over the drawer icon, not just over the open drawer area.
besides that, whats missing and need to be fixed?
Better to respond later than never. As a *tester*, I didn't find any more problems - patch sould be adapted to the GNOME head, and the drawer should stay open if mouse pointer is over the drawer icon, not just over the open drawer area.
yeah, now up to maintainers to give the final word about it and if decided i should fix/implement whats missing. Anyone?
I think vuntz is just completely overworked, hence the silence here.
For GNOME 3, we removed the drawers from gnome-panel -- we believe they don't fit that well in GNOME 3, and there were always many issues (including usability issues) with them. We feel it's better this way.