menushell/toolbar/window: implement toggle maximize on double click
https://bugzilla.gnome.org/show_bug.cgi?id=700419
This commit is contained in:
parent
9def8c20b8
commit
be5b6460e7
@ -70,6 +70,7 @@
|
|||||||
#include "gtkmenushellprivate.h"
|
#include "gtkmenushellprivate.h"
|
||||||
#include "gtkmnemonichash.h"
|
#include "gtkmnemonichash.h"
|
||||||
#include "gtkwindow.h"
|
#include "gtkwindow.h"
|
||||||
|
#include "gtkwindowprivate.h"
|
||||||
#include "gtkprivate.h"
|
#include "gtkprivate.h"
|
||||||
#include "gtkmain.h"
|
#include "gtkmain.h"
|
||||||
#include "gtkintl.h"
|
#include "gtkintl.h"
|
||||||
@ -646,6 +647,9 @@ gtk_menu_shell_button_press (GtkWidget *widget,
|
|||||||
GtkWidget *menu_item;
|
GtkWidget *menu_item;
|
||||||
GtkWidget *parent;
|
GtkWidget *parent;
|
||||||
|
|
||||||
|
if (event->type == GDK_2BUTTON_PRESS)
|
||||||
|
return _gtk_window_handle_button_press_for_widget (widget, event);
|
||||||
|
|
||||||
if (event->type != GDK_BUTTON_PRESS)
|
if (event->type != GDK_BUTTON_PRESS)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
@ -701,21 +705,8 @@ gtk_menu_shell_button_press (GtkWidget *widget,
|
|||||||
{
|
{
|
||||||
if (!initially_active)
|
if (!initially_active)
|
||||||
{
|
{
|
||||||
gboolean window_drag = FALSE;
|
if (_gtk_window_handle_button_press_for_widget (widget, event))
|
||||||
|
|
||||||
gtk_widget_style_get (widget,
|
|
||||||
"window-dragging", &window_drag,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
if (window_drag)
|
|
||||||
{
|
|
||||||
gtk_menu_shell_deactivate (menu_shell);
|
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,7 @@
|
|||||||
#include "gtktypebuiltins.h"
|
#include "gtktypebuiltins.h"
|
||||||
#include "gtkwidgetpath.h"
|
#include "gtkwidgetpath.h"
|
||||||
#include "gtkwidgetprivate.h"
|
#include "gtkwidgetprivate.h"
|
||||||
|
#include "gtkwindowprivate.h"
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2680,8 +2681,6 @@ static gboolean
|
|||||||
gtk_toolbar_button_press (GtkWidget *toolbar,
|
gtk_toolbar_button_press (GtkWidget *toolbar,
|
||||||
GdkEventButton *event)
|
GdkEventButton *event)
|
||||||
{
|
{
|
||||||
GtkWidget *window;
|
|
||||||
|
|
||||||
if (gdk_event_triggers_context_menu ((GdkEvent *) event))
|
if (gdk_event_triggers_context_menu ((GdkEvent *) event))
|
||||||
{
|
{
|
||||||
gboolean return_value;
|
gboolean return_value;
|
||||||
@ -2693,32 +2692,7 @@ gtk_toolbar_button_press (GtkWidget *toolbar,
|
|||||||
return return_value;
|
return return_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event->type != GDK_BUTTON_PRESS)
|
return _gtk_window_handle_button_press_for_widget (toolbar, event);
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
window = gtk_widget_get_toplevel (toolbar);
|
|
||||||
|
|
||||||
if (window)
|
|
||||||
{
|
|
||||||
gboolean window_drag = FALSE;
|
|
||||||
|
|
||||||
gtk_widget_style_get (toolbar,
|
|
||||||
"window-dragging", &window_drag,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
if (window_drag)
|
|
||||||
{
|
|
||||||
gtk_window_begin_move_drag (GTK_WINDOW (window),
|
|
||||||
event->button,
|
|
||||||
event->x_root,
|
|
||||||
event->y_root,
|
|
||||||
event->time);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -3450,7 +3450,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
|
|||||||
gtk_widget_class_install_style_property (klass,
|
gtk_widget_class_install_style_property (klass,
|
||||||
g_param_spec_boolean ("window-dragging",
|
g_param_spec_boolean ("window-dragging",
|
||||||
P_("Window dragging"),
|
P_("Window dragging"),
|
||||||
P_("Whether windows can be dragged by clicking on empty areas"),
|
P_("Whether windows can be dragged and maximized by clicking on empty areas"),
|
||||||
FALSE,
|
FALSE,
|
||||||
GTK_PARAM_READABLE));
|
GTK_PARAM_READABLE));
|
||||||
|
|
||||||
|
@ -11667,3 +11667,54 @@ ensure_state_flag_backdrop (GtkWidget *widget)
|
|||||||
|
|
||||||
gtk_widget_queue_draw (widget);
|
gtk_widget_queue_draw (widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
_gtk_window_handle_button_press_for_widget (GtkWidget *widget,
|
||||||
|
GdkEventButton *event)
|
||||||
|
{
|
||||||
|
gboolean processed = FALSE;
|
||||||
|
gboolean window_drag = FALSE;
|
||||||
|
GtkWindow *window;
|
||||||
|
|
||||||
|
gtk_widget_style_get (GTK_WIDGET (widget),
|
||||||
|
"window-dragging", &window_drag,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
if (!window_drag)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (event->button != GDK_BUTTON_PRIMARY)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
window = GTK_WINDOW (gtk_widget_get_toplevel (widget));
|
||||||
|
|
||||||
|
switch (event->type)
|
||||||
|
{
|
||||||
|
case GDK_BUTTON_PRESS:
|
||||||
|
gtk_window_begin_move_drag (window,
|
||||||
|
event->button,
|
||||||
|
event->x_root,
|
||||||
|
event->y_root,
|
||||||
|
event->time);
|
||||||
|
processed = TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GDK_2BUTTON_PRESS:
|
||||||
|
{
|
||||||
|
GdkWindow *gdk_window = gtk_widget_get_window (GTK_WIDGET (window));
|
||||||
|
|
||||||
|
if (gdk_window_get_state (gdk_window) & GDK_WINDOW_STATE_MAXIMIZED)
|
||||||
|
gdk_window_unmaximize (gdk_window);
|
||||||
|
else
|
||||||
|
gdk_window_maximize (gdk_window);
|
||||||
|
|
||||||
|
processed = TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return processed;
|
||||||
|
}
|
||||||
|
@ -65,6 +65,9 @@ void _gtk_window_set_allocation (GtkWindow *window,
|
|||||||
const GtkAllocation *allocation,
|
const GtkAllocation *allocation,
|
||||||
GtkAllocation *allocation_out);
|
GtkAllocation *allocation_out);
|
||||||
|
|
||||||
|
gboolean _gtk_window_handle_button_press_for_widget (GtkWidget *widget,
|
||||||
|
GdkEventButton *event);
|
||||||
|
|
||||||
typedef void (*GtkWindowKeysForeachFunc) (GtkWindow *window,
|
typedef void (*GtkWindowKeysForeachFunc) (GtkWindow *window,
|
||||||
guint keyval,
|
guint keyval,
|
||||||
GdkModifierType modifiers,
|
GdkModifierType modifiers,
|
||||||
|
Loading…
Reference in New Issue
Block a user