forked from AuroraMiddleware/gtk
Make detached handleboxes work when their parent is minimized, porting the
Mon May 31 02:16:37 2004 Matthias Clasen <maclas@gmx.de> * gtk/gtkhandlebox.c: Make detached handleboxes work when their parent is minimized, porting the fix from 1.2. (#1923, #57182) Mon May 31 02:03:17 2004 Matthias Clasen <maclas@gmx.de> * gtk/gtkwindow.c (gtk_window_show): Make moving realized, unmapped windows work.
This commit is contained in:
parent
83f413b130
commit
684ce0c68b
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
Mon May 31 02:16:37 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gtk/gtkhandlebox.c: Make detached handleboxes work when their
|
||||||
|
parent is minimized, porting the fix from 1.2. (#1923, #57182)
|
||||||
|
|
||||||
|
Mon May 31 02:03:17 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gtk/gtkwindow.c (gtk_window_show): Make moving realized,
|
||||||
|
unmapped windows work.
|
||||||
|
|
||||||
Mon May 31 00:27:33 2004 Matthias Clasen <maclas@gmx.de>
|
Mon May 31 00:27:33 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
* gtk/gtkfilechooserutils.c (_gtk_file_chooser_set_delegate): Fix
|
* gtk/gtkfilechooserutils.c (_gtk_file_chooser_set_delegate): Fix
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
Mon May 31 02:16:37 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gtk/gtkhandlebox.c: Make detached handleboxes work when their
|
||||||
|
parent is minimized, porting the fix from 1.2. (#1923, #57182)
|
||||||
|
|
||||||
|
Mon May 31 02:03:17 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gtk/gtkwindow.c (gtk_window_show): Make moving realized,
|
||||||
|
unmapped windows work.
|
||||||
|
|
||||||
Mon May 31 00:27:33 2004 Matthias Clasen <maclas@gmx.de>
|
Mon May 31 00:27:33 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
* gtk/gtkfilechooserutils.c (_gtk_file_chooser_set_delegate): Fix
|
* gtk/gtkfilechooserutils.c (_gtk_file_chooser_set_delegate): Fix
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
Mon May 31 02:16:37 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gtk/gtkhandlebox.c: Make detached handleboxes work when their
|
||||||
|
parent is minimized, porting the fix from 1.2. (#1923, #57182)
|
||||||
|
|
||||||
|
Mon May 31 02:03:17 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gtk/gtkwindow.c (gtk_window_show): Make moving realized,
|
||||||
|
unmapped windows work.
|
||||||
|
|
||||||
Mon May 31 00:27:33 2004 Matthias Clasen <maclas@gmx.de>
|
Mon May 31 00:27:33 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
* gtk/gtkfilechooserutils.c (_gtk_file_chooser_set_delegate): Fix
|
* gtk/gtkfilechooserutils.c (_gtk_file_chooser_set_delegate): Fix
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
Mon May 31 02:16:37 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gtk/gtkhandlebox.c: Make detached handleboxes work when their
|
||||||
|
parent is minimized, porting the fix from 1.2. (#1923, #57182)
|
||||||
|
|
||||||
|
Mon May 31 02:03:17 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gtk/gtkwindow.c (gtk_window_show): Make moving realized,
|
||||||
|
unmapped windows work.
|
||||||
|
|
||||||
Mon May 31 00:27:33 2004 Matthias Clasen <maclas@gmx.de>
|
Mon May 31 00:27:33 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
* gtk/gtkfilechooserutils.c (_gtk_file_chooser_set_delegate): Fix
|
* gtk/gtkfilechooserutils.c (_gtk_file_chooser_set_delegate): Fix
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "gtkhandlebox.h"
|
#include "gtkhandlebox.h"
|
||||||
|
#include "gtkinvisible.h"
|
||||||
#include "gtkmain.h"
|
#include "gtkmain.h"
|
||||||
#include "gtkmarshalers.h"
|
#include "gtkmarshalers.h"
|
||||||
#include "gtkwindow.h"
|
#include "gtkwindow.h"
|
||||||
@ -139,6 +140,8 @@ static gint gtk_handle_box_motion (GtkWidget *widget,
|
|||||||
static gint gtk_handle_box_delete_event (GtkWidget *widget,
|
static gint gtk_handle_box_delete_event (GtkWidget *widget,
|
||||||
GdkEventAny *event);
|
GdkEventAny *event);
|
||||||
static void gtk_handle_box_reattach (GtkHandleBox *hb);
|
static void gtk_handle_box_reattach (GtkHandleBox *hb);
|
||||||
|
static void gtk_handle_box_end_drag (GtkHandleBox *hb,
|
||||||
|
guint32 time);
|
||||||
|
|
||||||
|
|
||||||
static GtkBinClass *parent_class;
|
static GtkBinClass *parent_class;
|
||||||
@ -243,8 +246,6 @@ gtk_handle_box_class_init (GtkHandleBoxClass *class)
|
|||||||
widget_class->size_allocate = gtk_handle_box_size_allocate;
|
widget_class->size_allocate = gtk_handle_box_size_allocate;
|
||||||
widget_class->expose_event = gtk_handle_box_expose;
|
widget_class->expose_event = gtk_handle_box_expose;
|
||||||
widget_class->button_press_event = gtk_handle_box_button_changed;
|
widget_class->button_press_event = gtk_handle_box_button_changed;
|
||||||
widget_class->button_release_event = gtk_handle_box_button_changed;
|
|
||||||
widget_class->motion_notify_event = gtk_handle_box_motion;
|
|
||||||
widget_class->delete_event = gtk_handle_box_delete_event;
|
widget_class->delete_event = gtk_handle_box_delete_event;
|
||||||
|
|
||||||
container_class->add = gtk_handle_box_add;
|
container_class->add = gtk_handle_box_add;
|
||||||
@ -996,6 +997,46 @@ gtk_handle_box_expose (GtkWidget *widget,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GtkWidget *
|
||||||
|
gtk_handle_box_get_invisible (void)
|
||||||
|
{
|
||||||
|
static GtkWidget *handle_box_invisible = NULL;
|
||||||
|
|
||||||
|
if (!handle_box_invisible)
|
||||||
|
{
|
||||||
|
handle_box_invisible = gtk_invisible_new ();
|
||||||
|
gtk_widget_show (handle_box_invisible);
|
||||||
|
}
|
||||||
|
|
||||||
|
return handle_box_invisible;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gtk_handle_box_grab_event (GtkWidget *widget,
|
||||||
|
GdkEvent *event,
|
||||||
|
GtkHandleBox *hb)
|
||||||
|
{
|
||||||
|
switch (event->type)
|
||||||
|
{
|
||||||
|
case GDK_BUTTON_RELEASE:
|
||||||
|
if (hb->in_drag) /* sanity check */
|
||||||
|
{
|
||||||
|
gtk_handle_box_end_drag (hb, event->button.time);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GDK_MOTION_NOTIFY:
|
||||||
|
return gtk_handle_box_motion (GTK_WIDGET (hb), (GdkEventMotion *)event);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static gint
|
static gint
|
||||||
gtk_handle_box_button_changed (GtkWidget *widget,
|
gtk_handle_box_button_changed (GtkWidget *widget,
|
||||||
GdkEventButton *event)
|
GdkEventButton *event)
|
||||||
@ -1053,6 +1094,7 @@ gtk_handle_box_button_changed (GtkWidget *widget,
|
|||||||
if (event->type == GDK_BUTTON_PRESS) /* Start a drag */
|
if (event->type == GDK_BUTTON_PRESS) /* Start a drag */
|
||||||
{
|
{
|
||||||
GtkHandleBoxPrivate *private = gtk_handle_box_get_private (hb);
|
GtkHandleBoxPrivate *private = gtk_handle_box_get_private (hb);
|
||||||
|
GtkWidget *invisible = gtk_handle_box_get_invisible ();
|
||||||
gint desk_x, desk_y;
|
gint desk_x, desk_y;
|
||||||
gint root_x, root_y;
|
gint root_x, root_y;
|
||||||
gint width, height;
|
gint width, height;
|
||||||
@ -1060,10 +1102,10 @@ gtk_handle_box_button_changed (GtkWidget *widget,
|
|||||||
gdk_window_get_deskrelative_origin (hb->bin_window, &desk_x, &desk_y);
|
gdk_window_get_deskrelative_origin (hb->bin_window, &desk_x, &desk_y);
|
||||||
gdk_window_get_origin (hb->bin_window, &root_x, &root_y);
|
gdk_window_get_origin (hb->bin_window, &root_x, &root_y);
|
||||||
gdk_drawable_get_size (hb->bin_window, &width, &height);
|
gdk_drawable_get_size (hb->bin_window, &width, &height);
|
||||||
|
|
||||||
private->orig_x = event->x_root;
|
private->orig_x = event->x_root;
|
||||||
private->orig_y = event->y_root;
|
private->orig_y = event->y_root;
|
||||||
|
|
||||||
hb->float_allocation.x = root_x - event->x_root;
|
hb->float_allocation.x = root_x - event->x_root;
|
||||||
hb->float_allocation.y = root_y - event->y_root;
|
hb->float_allocation.y = root_y - event->y_root;
|
||||||
hb->float_allocation.width = width;
|
hb->float_allocation.width = width;
|
||||||
@ -1072,28 +1114,43 @@ gtk_handle_box_button_changed (GtkWidget *widget,
|
|||||||
hb->deskoff_x = desk_x - root_x;
|
hb->deskoff_x = desk_x - root_x;
|
||||||
hb->deskoff_y = desk_y - root_y;
|
hb->deskoff_y = desk_y - root_y;
|
||||||
|
|
||||||
gdk_window_get_origin (widget->window, &root_x, &root_y);
|
if (gdk_window_is_viewable (widget->window))
|
||||||
gdk_drawable_get_size (widget->window, &width, &height);
|
{
|
||||||
|
gdk_window_get_origin (widget->window, &root_x, &root_y);
|
||||||
|
gdk_drawable_get_size (widget->window, &width, &height);
|
||||||
|
|
||||||
hb->attach_allocation.x = root_x;
|
hb->attach_allocation.x = root_x;
|
||||||
hb->attach_allocation.y = root_y;
|
hb->attach_allocation.y = root_y;
|
||||||
hb->attach_allocation.width = width;
|
hb->attach_allocation.width = width;
|
||||||
hb->attach_allocation.height = height;
|
hb->attach_allocation.height = height;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hb->attach_allocation.x = -1;
|
||||||
|
hb->attach_allocation.y = -1;
|
||||||
|
hb->attach_allocation.width = 0;
|
||||||
|
hb->attach_allocation.height = 0;
|
||||||
|
}
|
||||||
hb->in_drag = TRUE;
|
hb->in_drag = TRUE;
|
||||||
fleur = gdk_cursor_new_for_display (gtk_widget_get_display (widget),
|
fleur = gdk_cursor_new_for_display (gtk_widget_get_display (widget),
|
||||||
GDK_FLEUR);
|
GDK_FLEUR);
|
||||||
if (gdk_pointer_grab (widget->window,
|
if (gdk_pointer_grab (invisible->window,
|
||||||
FALSE,
|
FALSE,
|
||||||
(GDK_BUTTON1_MOTION_MASK |
|
(GDK_BUTTON1_MOTION_MASK |
|
||||||
GDK_POINTER_MOTION_HINT_MASK |
|
GDK_POINTER_MOTION_HINT_MASK |
|
||||||
GDK_BUTTON_RELEASE_MASK),
|
GDK_BUTTON_RELEASE_MASK),
|
||||||
NULL,
|
NULL,
|
||||||
fleur,
|
fleur,
|
||||||
GDK_CURRENT_TIME) != 0)
|
event->time) != 0)
|
||||||
{
|
{
|
||||||
hb->in_drag = FALSE;
|
hb->in_drag = FALSE;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gtk_grab_add (invisible);
|
||||||
|
g_signal_connect (invisible, "event",
|
||||||
|
G_CALLBACK (gtk_handle_box_grab_event), hb);
|
||||||
|
}
|
||||||
|
|
||||||
gdk_cursor_unref (fleur);
|
gdk_cursor_unref (fleur);
|
||||||
event_handled = TRUE;
|
event_handled = TRUE;
|
||||||
@ -1104,17 +1161,6 @@ gtk_handle_box_button_changed (GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (event->type == GDK_BUTTON_RELEASE &&
|
|
||||||
hb->in_drag)
|
|
||||||
{
|
|
||||||
if (event->window != widget->window)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
|
|
||||||
GDK_CURRENT_TIME);
|
|
||||||
hb->in_drag = FALSE;
|
|
||||||
event_handled = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return event_handled;
|
return event_handled;
|
||||||
}
|
}
|
||||||
@ -1123,7 +1169,7 @@ static gint
|
|||||||
gtk_handle_box_motion (GtkWidget *widget,
|
gtk_handle_box_motion (GtkWidget *widget,
|
||||||
GdkEventMotion *event)
|
GdkEventMotion *event)
|
||||||
{
|
{
|
||||||
GtkHandleBox *hb;
|
GtkHandleBox *hb = GTK_HANDLE_BOX (widget);
|
||||||
gint new_x, new_y;
|
gint new_x, new_y;
|
||||||
gint snap_edge;
|
gint snap_edge;
|
||||||
gboolean is_snapped = FALSE;
|
gboolean is_snapped = FALSE;
|
||||||
@ -1131,13 +1177,8 @@ gtk_handle_box_motion (GtkWidget *widget,
|
|||||||
GdkGeometry geometry;
|
GdkGeometry geometry;
|
||||||
GdkScreen *screen, *pointer_screen;
|
GdkScreen *screen, *pointer_screen;
|
||||||
|
|
||||||
hb = GTK_HANDLE_BOX (widget);
|
|
||||||
if (!hb->in_drag)
|
if (!hb->in_drag)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (!hb->in_drag || (event->window != widget->window))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
handle_position = effective_handle_position (hb);
|
handle_position = effective_handle_position (hb);
|
||||||
|
|
||||||
/* Calculate the attachment point on the float, if the float
|
/* Calculate the attachment point on the float, if the float
|
||||||
@ -1386,11 +1427,22 @@ gtk_handle_box_reattach (GtkHandleBox *hb)
|
|||||||
hb->float_window_mapped = FALSE;
|
hb->float_window_mapped = FALSE;
|
||||||
}
|
}
|
||||||
if (hb->in_drag)
|
if (hb->in_drag)
|
||||||
{
|
gtk_handle_box_end_drag (hb, GDK_CURRENT_TIME);
|
||||||
gdk_display_pointer_ungrab (gtk_widget_get_display (GTK_WIDGET (hb)),
|
|
||||||
GDK_CURRENT_TIME);
|
|
||||||
hb->in_drag = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_widget_queue_resize (GTK_WIDGET (hb));
|
gtk_widget_queue_resize (GTK_WIDGET (hb));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_handle_box_end_drag (GtkHandleBox *hb,
|
||||||
|
guint32 time)
|
||||||
|
{
|
||||||
|
GtkWidget *invisible = gtk_handle_box_get_invisible ();
|
||||||
|
|
||||||
|
hb->in_drag = FALSE;
|
||||||
|
|
||||||
|
gtk_grab_remove (invisible);
|
||||||
|
gdk_pointer_ungrab (time);
|
||||||
|
g_signal_handlers_disconnect_by_func (invisible,
|
||||||
|
G_CALLBACK (gtk_handle_box_grab_event),
|
||||||
|
hb);
|
||||||
|
}
|
||||||
|
@ -3724,9 +3724,11 @@ gtk_window_show (GtkWidget *widget)
|
|||||||
* then we created it with widget->allocation anyhow.
|
* then we created it with widget->allocation anyhow.
|
||||||
*/
|
*/
|
||||||
if (!was_realized)
|
if (!was_realized)
|
||||||
gdk_window_resize (widget->window,
|
gdk_window_move_resize (widget->window,
|
||||||
configure_request.width,
|
configure_request.x,
|
||||||
configure_request.height);
|
configure_request.y,
|
||||||
|
configure_request.width,
|
||||||
|
configure_request.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_container_check_resize (container);
|
gtk_container_check_resize (container);
|
||||||
|
Loading…
Reference in New Issue
Block a user