Allow windows to be dragged by clicking on empty areas

Allow windows to be dragged by clicking on empty areas in menubars
and toolbars. This is under theme control, via the GtkWidget::window-dragging
style property. The idea is that it makes sense to turn this on if a
theme makes the window frame and the menubar/toolbar appear visually
contiguous.

The main patch was written by Cody Russell, with a contribution by
Ayan George. See bug 611313.
This commit is contained in:
Matthias Clasen
2010-07-16 01:15:47 -04:00
parent 89d0955431
commit 7491e9e97a
4 changed files with 231 additions and 44 deletions

View File

@ -596,18 +596,45 @@ gtk_menu_shell_button_press (GtkWidget *widget,
if (!menu_shell->active || !menu_shell->button)
{
_gtk_menu_shell_activate (menu_shell);
gboolean initially_active = menu_shell->active;
menu_shell->button = event->button;
if (menu_item && _gtk_menu_item_is_selectable (menu_item) &&
menu_item->parent == widget &&
menu_item != menu_shell->active_menu_item)
if (menu_item)
{
if (GTK_MENU_SHELL_GET_CLASS (menu_shell)->submenu_placement == GTK_TOP_BOTTOM)
if (_gtk_menu_item_is_selectable (menu_item) &&
menu_item->parent == widget &&
menu_item != menu_shell->active_menu_item)
{
menu_shell->activate_time = event->time;
gtk_menu_shell_select_item (menu_shell, menu_item);
_gtk_menu_shell_activate (menu_shell);
menu_shell->button = event->button;
if (GTK_MENU_SHELL_GET_CLASS (menu_shell)->submenu_placement == GTK_TOP_BOTTOM)
{
menu_shell->activate_time = event->time;
gtk_menu_shell_select_item (menu_shell, menu_item);
}
}
}
else
{
if (!initially_active)
{
gboolean window_drag = FALSE;
gtk_widget_style_get (widget,
"window-dragging", &window_drag,
NULL);
if (window_drag)
{
gtk_menu_shell_deactivate (menu_shell);
gtk_window_begin_move_drag (GTK_WINDOW (gtk_widget_get_toplevel (widget)),
event->button,
event->x_root,
event->y_root,
event->time);
}
}
}
}