mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-09-12 20:41:34 +00:00
Revert "editable-label: don't use a input-output window"
This reverts commit b67360316c
.
It breaks scrolling, as explained in
https://bugzilla.gnome.org/show_bug.cgi?id=686322
This commit is contained in:
parent
b67360316c
commit
f149927a48
|
@ -602,7 +602,6 @@ eel_editable_label_init (EelEditableLabel *label)
|
|||
label->n_bytes = 0;
|
||||
|
||||
gtk_widget_set_can_focus (GTK_WIDGET (label), TRUE);
|
||||
gtk_widget_set_has_window (GTK_WIDGET (label), FALSE);
|
||||
gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (label)),
|
||||
GTK_STYLE_CLASS_ENTRY);
|
||||
|
||||
|
@ -1173,12 +1172,7 @@ static void
|
|||
eel_editable_label_size_allocate (GtkWidget *widget,
|
||||
GtkAllocation *allocation)
|
||||
{
|
||||
EelEditableLabel *label = EEL_EDITABLE_LABEL (widget);
|
||||
|
||||
(* GTK_WIDGET_CLASS (eel_editable_label_parent_class)->size_allocate) (widget, allocation);
|
||||
|
||||
gdk_window_move_resize (label->text_area, allocation->x, allocation->y,
|
||||
allocation->width, allocation->height);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1596,24 +1590,23 @@ eel_editable_label_realize (GtkWidget *widget)
|
|||
gint attributes_mask;
|
||||
GtkAllocation allocation;
|
||||
GdkWindow *window;
|
||||
GtkStyleContext *style;
|
||||
|
||||
gtk_widget_set_realized (widget, TRUE);
|
||||
window = gtk_widget_get_parent_window (widget);
|
||||
gtk_widget_set_window (widget, window);
|
||||
g_object_ref (window);
|
||||
|
||||
label = EEL_EDITABLE_LABEL (widget);
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
|
||||
attributes.wclass = GDK_INPUT_ONLY;
|
||||
attributes.wclass = GDK_INPUT_OUTPUT;
|
||||
attributes.window_type = GDK_WINDOW_CHILD;
|
||||
attributes.x = allocation.x;
|
||||
attributes.y = allocation.y;
|
||||
attributes.width = allocation.width;
|
||||
attributes.height = allocation.height;
|
||||
attributes.visual = gtk_widget_get_visual (widget);
|
||||
attributes.cursor = gdk_cursor_new (GDK_XTERM);
|
||||
attributes.event_mask = gtk_widget_get_events (widget) |
|
||||
(GDK_BUTTON_PRESS_MASK |
|
||||
(GDK_EXPOSURE_MASK |
|
||||
GDK_BUTTON_PRESS_MASK |
|
||||
GDK_BUTTON_RELEASE_MASK |
|
||||
GDK_BUTTON1_MOTION_MASK |
|
||||
GDK_BUTTON3_MOTION_MASK |
|
||||
|
@ -1622,14 +1615,18 @@ eel_editable_label_realize (GtkWidget *widget)
|
|||
GDK_ENTER_NOTIFY_MASK |
|
||||
GDK_LEAVE_NOTIFY_MASK);
|
||||
|
||||
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_CURSOR;
|
||||
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_CURSOR;
|
||||
|
||||
label->text_area = gdk_window_new (gtk_widget_get_window (widget),
|
||||
&attributes, attributes_mask);
|
||||
gdk_window_set_user_data (label->text_area, widget);
|
||||
gtk_im_context_set_client_window (label->im_context, label->text_area);
|
||||
window = gdk_window_new (gtk_widget_get_parent_window (widget),
|
||||
&attributes, attributes_mask);
|
||||
gtk_widget_set_window (widget, window);
|
||||
gdk_window_set_user_data (window, widget);
|
||||
|
||||
g_object_unref (attributes.cursor);
|
||||
|
||||
style = gtk_widget_get_style_context (widget);
|
||||
gtk_style_context_set_background (style, gtk_widget_get_window (widget));
|
||||
gtk_im_context_set_client_window (label->im_context, gtk_widget_get_window (widget));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1639,14 +1636,8 @@ eel_editable_label_unrealize (GtkWidget *widget)
|
|||
|
||||
label = EEL_EDITABLE_LABEL (widget);
|
||||
|
||||
/* Strange. Copied from GtkEntry, should be NULL? */
|
||||
gtk_im_context_set_client_window (label->im_context, NULL);
|
||||
|
||||
if (label->text_area)
|
||||
{
|
||||
gdk_window_set_user_data (label->text_area, NULL);
|
||||
gdk_window_destroy (label->text_area);
|
||||
label->text_area = NULL;
|
||||
}
|
||||
|
||||
(* GTK_WIDGET_CLASS (eel_editable_label_parent_class)->unrealize) (widget);
|
||||
}
|
||||
|
@ -1654,21 +1645,12 @@ eel_editable_label_unrealize (GtkWidget *widget)
|
|||
static void
|
||||
eel_editable_label_map (GtkWidget *widget)
|
||||
{
|
||||
EelEditableLabel *label = EEL_EDITABLE_LABEL (widget);
|
||||
|
||||
(* GTK_WIDGET_CLASS (eel_editable_label_parent_class)->map) (widget);
|
||||
|
||||
gdk_window_show (label->text_area);
|
||||
}
|
||||
|
||||
static void
|
||||
eel_editable_label_unmap (GtkWidget *widget)
|
||||
|
||||
{
|
||||
EelEditableLabel *label = EEL_EDITABLE_LABEL (widget);
|
||||
|
||||
gdk_window_hide (label->text_area);
|
||||
|
||||
(* GTK_WIDGET_CLASS (eel_editable_label_parent_class)->unmap) (widget);
|
||||
}
|
||||
|
||||
|
@ -1866,7 +1848,7 @@ eel_editable_label_motion (GtkWidget *widget,
|
|||
if ((event->state & GDK_BUTTON1_MASK) == 0)
|
||||
return FALSE;
|
||||
|
||||
gdk_window_get_device_position (label->text_area,
|
||||
gdk_window_get_device_position (gtk_widget_get_window (widget),
|
||||
event->device,
|
||||
&x, &y, NULL);
|
||||
|
||||
|
@ -3002,7 +2984,7 @@ popup_position_func (GtkMenu *menu,
|
|||
|
||||
g_assert (gtk_widget_get_realized (widget));
|
||||
|
||||
gdk_window_get_origin (label->text_area, x, y);
|
||||
gdk_window_get_origin (gtk_widget_get_window (widget), x, y);
|
||||
|
||||
/*gtk_widget_size_request (label->popup_menu, &req);*/
|
||||
gtk_widget_get_requisition (widget, &req);
|
||||
|
|
|
@ -74,7 +74,6 @@ struct _EelEditableLabel
|
|||
|
||||
GtkWidget *popup_menu;
|
||||
|
||||
GdkWindow *text_area;
|
||||
GtkIMContext *im_context;
|
||||
gboolean need_im_reset;
|
||||
int preedit_length; /* length of preedit string, in bytes */
|
||||
|
|
Loading…
Reference in a new issue