/home/otaylor/commit
This commit is contained in:
parent
7bd32a06cf
commit
34e324ca70
24
ChangeLog
24
ChangeLog
@ -1,3 +1,27 @@
|
|||||||
|
Mon Mar 23 18:19:42 1998 Owen Taylor <owt1@cornell.edu>
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c gtk/gtkmenushell.c: Instead of making
|
||||||
|
an X grab when the button is released, grab immediately.
|
||||||
|
This solves a problem where menus wouldn't pop down
|
||||||
|
if the caller didn't have the BUTTON_RELEASE mask on
|
||||||
|
their window, and and another where the X grab would
|
||||||
|
be released prematurely.
|
||||||
|
|
||||||
|
* gtk/gtklist.c gtk/gtktree.c: Do sanity checking on
|
||||||
|
button presses to make sure they occurred in a child item.
|
||||||
|
(From: "Damon Chaplin" <DAChaplin@email.msn.com>)
|
||||||
|
|
||||||
|
* gtk/gtkmenushell.c: Do sanity checking on button
|
||||||
|
press/releases. Handle button events on window widget
|
||||||
|
descendents of menu items correctly.
|
||||||
|
|
||||||
|
* gtk/gtkclist.c gtk/gtkbutton.c gtk/gtkviewport.c
|
||||||
|
gtk/gtkeventbox.c:
|
||||||
|
|
||||||
|
Make the window size allocated in _realize() match that
|
||||||
|
in _size_allocate(). Take into account the border width
|
||||||
|
in the draw() handler.
|
||||||
|
|
||||||
Mon Mar 23 15:26:25 1998 Tim Janik <timj@gtk.org>
|
Mon Mar 23 15:26:25 1998 Tim Janik <timj@gtk.org>
|
||||||
|
|
||||||
* gtk/gtkentry.c (gtk_entry_append_text): check for text!=NULL.
|
* gtk/gtkentry.c (gtk_entry_append_text): check for text!=NULL.
|
||||||
|
@ -1,3 +1,27 @@
|
|||||||
|
Mon Mar 23 18:19:42 1998 Owen Taylor <owt1@cornell.edu>
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c gtk/gtkmenushell.c: Instead of making
|
||||||
|
an X grab when the button is released, grab immediately.
|
||||||
|
This solves a problem where menus wouldn't pop down
|
||||||
|
if the caller didn't have the BUTTON_RELEASE mask on
|
||||||
|
their window, and and another where the X grab would
|
||||||
|
be released prematurely.
|
||||||
|
|
||||||
|
* gtk/gtklist.c gtk/gtktree.c: Do sanity checking on
|
||||||
|
button presses to make sure they occurred in a child item.
|
||||||
|
(From: "Damon Chaplin" <DAChaplin@email.msn.com>)
|
||||||
|
|
||||||
|
* gtk/gtkmenushell.c: Do sanity checking on button
|
||||||
|
press/releases. Handle button events on window widget
|
||||||
|
descendents of menu items correctly.
|
||||||
|
|
||||||
|
* gtk/gtkclist.c gtk/gtkbutton.c gtk/gtkviewport.c
|
||||||
|
gtk/gtkeventbox.c:
|
||||||
|
|
||||||
|
Make the window size allocated in _realize() match that
|
||||||
|
in _size_allocate(). Take into account the border width
|
||||||
|
in the draw() handler.
|
||||||
|
|
||||||
Mon Mar 23 15:26:25 1998 Tim Janik <timj@gtk.org>
|
Mon Mar 23 15:26:25 1998 Tim Janik <timj@gtk.org>
|
||||||
|
|
||||||
* gtk/gtkentry.c (gtk_entry_append_text): check for text!=NULL.
|
* gtk/gtkentry.c (gtk_entry_append_text): check for text!=NULL.
|
||||||
|
@ -1,3 +1,27 @@
|
|||||||
|
Mon Mar 23 18:19:42 1998 Owen Taylor <owt1@cornell.edu>
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c gtk/gtkmenushell.c: Instead of making
|
||||||
|
an X grab when the button is released, grab immediately.
|
||||||
|
This solves a problem where menus wouldn't pop down
|
||||||
|
if the caller didn't have the BUTTON_RELEASE mask on
|
||||||
|
their window, and and another where the X grab would
|
||||||
|
be released prematurely.
|
||||||
|
|
||||||
|
* gtk/gtklist.c gtk/gtktree.c: Do sanity checking on
|
||||||
|
button presses to make sure they occurred in a child item.
|
||||||
|
(From: "Damon Chaplin" <DAChaplin@email.msn.com>)
|
||||||
|
|
||||||
|
* gtk/gtkmenushell.c: Do sanity checking on button
|
||||||
|
press/releases. Handle button events on window widget
|
||||||
|
descendents of menu items correctly.
|
||||||
|
|
||||||
|
* gtk/gtkclist.c gtk/gtkbutton.c gtk/gtkviewport.c
|
||||||
|
gtk/gtkeventbox.c:
|
||||||
|
|
||||||
|
Make the window size allocated in _realize() match that
|
||||||
|
in _size_allocate(). Take into account the border width
|
||||||
|
in the draw() handler.
|
||||||
|
|
||||||
Mon Mar 23 15:26:25 1998 Tim Janik <timj@gtk.org>
|
Mon Mar 23 15:26:25 1998 Tim Janik <timj@gtk.org>
|
||||||
|
|
||||||
* gtk/gtkentry.c (gtk_entry_append_text): check for text!=NULL.
|
* gtk/gtkentry.c (gtk_entry_append_text): check for text!=NULL.
|
||||||
|
@ -1,3 +1,27 @@
|
|||||||
|
Mon Mar 23 18:19:42 1998 Owen Taylor <owt1@cornell.edu>
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c gtk/gtkmenushell.c: Instead of making
|
||||||
|
an X grab when the button is released, grab immediately.
|
||||||
|
This solves a problem where menus wouldn't pop down
|
||||||
|
if the caller didn't have the BUTTON_RELEASE mask on
|
||||||
|
their window, and and another where the X grab would
|
||||||
|
be released prematurely.
|
||||||
|
|
||||||
|
* gtk/gtklist.c gtk/gtktree.c: Do sanity checking on
|
||||||
|
button presses to make sure they occurred in a child item.
|
||||||
|
(From: "Damon Chaplin" <DAChaplin@email.msn.com>)
|
||||||
|
|
||||||
|
* gtk/gtkmenushell.c: Do sanity checking on button
|
||||||
|
press/releases. Handle button events on window widget
|
||||||
|
descendents of menu items correctly.
|
||||||
|
|
||||||
|
* gtk/gtkclist.c gtk/gtkbutton.c gtk/gtkviewport.c
|
||||||
|
gtk/gtkeventbox.c:
|
||||||
|
|
||||||
|
Make the window size allocated in _realize() match that
|
||||||
|
in _size_allocate(). Take into account the border width
|
||||||
|
in the draw() handler.
|
||||||
|
|
||||||
Mon Mar 23 15:26:25 1998 Tim Janik <timj@gtk.org>
|
Mon Mar 23 15:26:25 1998 Tim Janik <timj@gtk.org>
|
||||||
|
|
||||||
* gtk/gtkentry.c (gtk_entry_append_text): check for text!=NULL.
|
* gtk/gtkentry.c (gtk_entry_append_text): check for text!=NULL.
|
||||||
|
@ -1,3 +1,27 @@
|
|||||||
|
Mon Mar 23 18:19:42 1998 Owen Taylor <owt1@cornell.edu>
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c gtk/gtkmenushell.c: Instead of making
|
||||||
|
an X grab when the button is released, grab immediately.
|
||||||
|
This solves a problem where menus wouldn't pop down
|
||||||
|
if the caller didn't have the BUTTON_RELEASE mask on
|
||||||
|
their window, and and another where the X grab would
|
||||||
|
be released prematurely.
|
||||||
|
|
||||||
|
* gtk/gtklist.c gtk/gtktree.c: Do sanity checking on
|
||||||
|
button presses to make sure they occurred in a child item.
|
||||||
|
(From: "Damon Chaplin" <DAChaplin@email.msn.com>)
|
||||||
|
|
||||||
|
* gtk/gtkmenushell.c: Do sanity checking on button
|
||||||
|
press/releases. Handle button events on window widget
|
||||||
|
descendents of menu items correctly.
|
||||||
|
|
||||||
|
* gtk/gtkclist.c gtk/gtkbutton.c gtk/gtkviewport.c
|
||||||
|
gtk/gtkeventbox.c:
|
||||||
|
|
||||||
|
Make the window size allocated in _realize() match that
|
||||||
|
in _size_allocate(). Take into account the border width
|
||||||
|
in the draw() handler.
|
||||||
|
|
||||||
Mon Mar 23 15:26:25 1998 Tim Janik <timj@gtk.org>
|
Mon Mar 23 15:26:25 1998 Tim Janik <timj@gtk.org>
|
||||||
|
|
||||||
* gtk/gtkentry.c (gtk_entry_append_text): check for text!=NULL.
|
* gtk/gtkentry.c (gtk_entry_append_text): check for text!=NULL.
|
||||||
|
@ -1,3 +1,27 @@
|
|||||||
|
Mon Mar 23 18:19:42 1998 Owen Taylor <owt1@cornell.edu>
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c gtk/gtkmenushell.c: Instead of making
|
||||||
|
an X grab when the button is released, grab immediately.
|
||||||
|
This solves a problem where menus wouldn't pop down
|
||||||
|
if the caller didn't have the BUTTON_RELEASE mask on
|
||||||
|
their window, and and another where the X grab would
|
||||||
|
be released prematurely.
|
||||||
|
|
||||||
|
* gtk/gtklist.c gtk/gtktree.c: Do sanity checking on
|
||||||
|
button presses to make sure they occurred in a child item.
|
||||||
|
(From: "Damon Chaplin" <DAChaplin@email.msn.com>)
|
||||||
|
|
||||||
|
* gtk/gtkmenushell.c: Do sanity checking on button
|
||||||
|
press/releases. Handle button events on window widget
|
||||||
|
descendents of menu items correctly.
|
||||||
|
|
||||||
|
* gtk/gtkclist.c gtk/gtkbutton.c gtk/gtkviewport.c
|
||||||
|
gtk/gtkeventbox.c:
|
||||||
|
|
||||||
|
Make the window size allocated in _realize() match that
|
||||||
|
in _size_allocate(). Take into account the border width
|
||||||
|
in the draw() handler.
|
||||||
|
|
||||||
Mon Mar 23 15:26:25 1998 Tim Janik <timj@gtk.org>
|
Mon Mar 23 15:26:25 1998 Tim Janik <timj@gtk.org>
|
||||||
|
|
||||||
* gtk/gtkentry.c (gtk_entry_append_text): check for text!=NULL.
|
* gtk/gtkentry.c (gtk_entry_append_text): check for text!=NULL.
|
||||||
|
@ -1,3 +1,27 @@
|
|||||||
|
Mon Mar 23 18:19:42 1998 Owen Taylor <owt1@cornell.edu>
|
||||||
|
|
||||||
|
* gtk/gtkmenu.c gtk/gtkmenushell.c: Instead of making
|
||||||
|
an X grab when the button is released, grab immediately.
|
||||||
|
This solves a problem where menus wouldn't pop down
|
||||||
|
if the caller didn't have the BUTTON_RELEASE mask on
|
||||||
|
their window, and and another where the X grab would
|
||||||
|
be released prematurely.
|
||||||
|
|
||||||
|
* gtk/gtklist.c gtk/gtktree.c: Do sanity checking on
|
||||||
|
button presses to make sure they occurred in a child item.
|
||||||
|
(From: "Damon Chaplin" <DAChaplin@email.msn.com>)
|
||||||
|
|
||||||
|
* gtk/gtkmenushell.c: Do sanity checking on button
|
||||||
|
press/releases. Handle button events on window widget
|
||||||
|
descendents of menu items correctly.
|
||||||
|
|
||||||
|
* gtk/gtkclist.c gtk/gtkbutton.c gtk/gtkviewport.c
|
||||||
|
gtk/gtkeventbox.c:
|
||||||
|
|
||||||
|
Make the window size allocated in _realize() match that
|
||||||
|
in _size_allocate(). Take into account the border width
|
||||||
|
in the draw() handler.
|
||||||
|
|
||||||
Mon Mar 23 15:26:25 1998 Tim Janik <timj@gtk.org>
|
Mon Mar 23 15:26:25 1998 Tim Janik <timj@gtk.org>
|
||||||
|
|
||||||
* gtk/gtkentry.c (gtk_entry_append_text): check for text!=NULL.
|
* gtk/gtkentry.c (gtk_entry_append_text): check for text!=NULL.
|
||||||
|
@ -324,6 +324,7 @@ gtk_button_realize (GtkWidget *widget)
|
|||||||
GtkButton *button;
|
GtkButton *button;
|
||||||
GdkWindowAttr attributes;
|
GdkWindowAttr attributes;
|
||||||
gint attributes_mask;
|
gint attributes_mask;
|
||||||
|
gint border_width;
|
||||||
|
|
||||||
g_return_if_fail (widget != NULL);
|
g_return_if_fail (widget != NULL);
|
||||||
g_return_if_fail (GTK_IS_BUTTON (widget));
|
g_return_if_fail (GTK_IS_BUTTON (widget));
|
||||||
@ -331,11 +332,13 @@ gtk_button_realize (GtkWidget *widget)
|
|||||||
button = GTK_BUTTON (widget);
|
button = GTK_BUTTON (widget);
|
||||||
GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
|
GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
|
||||||
|
|
||||||
|
border_width = GTK_CONTAINER (widget)->border_width;
|
||||||
|
|
||||||
attributes.window_type = GDK_WINDOW_CHILD;
|
attributes.window_type = GDK_WINDOW_CHILD;
|
||||||
attributes.x = widget->allocation.x;
|
attributes.x = widget->allocation.x + border_width;
|
||||||
attributes.y = widget->allocation.y;
|
attributes.y = widget->allocation.y + border_width;
|
||||||
attributes.width = widget->allocation.width;
|
attributes.width = widget->allocation.width - border_width * 2;
|
||||||
attributes.height = widget->allocation.height;
|
attributes.height = widget->allocation.height - border_width * 2;
|
||||||
attributes.wclass = GDK_INPUT_OUTPUT;
|
attributes.wclass = GDK_INPUT_OUTPUT;
|
||||||
attributes.visual = gtk_widget_get_visual (widget);
|
attributes.visual = gtk_widget_get_visual (widget);
|
||||||
attributes.colormap = gtk_widget_get_colormap (widget);
|
attributes.colormap = gtk_widget_get_colormap (widget);
|
||||||
@ -482,6 +485,7 @@ gtk_button_draw (GtkWidget *widget,
|
|||||||
{
|
{
|
||||||
GtkButton *button;
|
GtkButton *button;
|
||||||
GdkRectangle child_area;
|
GdkRectangle child_area;
|
||||||
|
GdkRectangle tmp_area;
|
||||||
|
|
||||||
g_return_if_fail (widget != NULL);
|
g_return_if_fail (widget != NULL);
|
||||||
g_return_if_fail (GTK_IS_BUTTON (widget));
|
g_return_if_fail (GTK_IS_BUTTON (widget));
|
||||||
@ -491,9 +495,13 @@ gtk_button_draw (GtkWidget *widget,
|
|||||||
{
|
{
|
||||||
button = GTK_BUTTON (widget);
|
button = GTK_BUTTON (widget);
|
||||||
|
|
||||||
gtk_button_paint (widget, area);
|
tmp_area = *area;
|
||||||
|
tmp_area.x -= GTK_CONTAINER (button)->border_width;
|
||||||
|
tmp_area.y -= GTK_CONTAINER (button)->border_width;
|
||||||
|
|
||||||
if (button->child && gtk_widget_intersect (button->child, area, &child_area))
|
gtk_button_paint (widget, &tmp_area);
|
||||||
|
|
||||||
|
if (button->child && gtk_widget_intersect (button->child, &tmp_area, &child_area))
|
||||||
gtk_widget_draw (button->child, &child_area);
|
gtk_widget_draw (button->child, &child_area);
|
||||||
|
|
||||||
gtk_widget_draw_default (widget);
|
gtk_widget_draw_default (widget);
|
||||||
|
@ -1729,6 +1729,7 @@ gtk_clist_realize (GtkWidget * widget)
|
|||||||
GdkWindowAttr attributes;
|
GdkWindowAttr attributes;
|
||||||
gint attributes_mask;
|
gint attributes_mask;
|
||||||
GdkGCValues values;
|
GdkGCValues values;
|
||||||
|
gint border_width;
|
||||||
|
|
||||||
g_return_if_fail (widget != NULL);
|
g_return_if_fail (widget != NULL);
|
||||||
g_return_if_fail (GTK_IS_CLIST (widget));
|
g_return_if_fail (GTK_IS_CLIST (widget));
|
||||||
@ -1737,11 +1738,13 @@ gtk_clist_realize (GtkWidget * widget)
|
|||||||
|
|
||||||
GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
|
GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
|
||||||
|
|
||||||
|
border_width = GTK_CONTAINER (widget)->border_width;
|
||||||
|
|
||||||
attributes.window_type = GDK_WINDOW_CHILD;
|
attributes.window_type = GDK_WINDOW_CHILD;
|
||||||
attributes.x = widget->allocation.x;
|
attributes.x = widget->allocation.x + border_width;
|
||||||
attributes.y = widget->allocation.y;
|
attributes.y = widget->allocation.y + border_width;
|
||||||
attributes.width = widget->allocation.width;
|
attributes.width = widget->allocation.width - border_width * 2;
|
||||||
attributes.height = widget->allocation.height;
|
attributes.height = widget->allocation.height - border_width * 2;
|
||||||
attributes.wclass = GDK_INPUT_OUTPUT;
|
attributes.wclass = GDK_INPUT_OUTPUT;
|
||||||
attributes.visual = gtk_widget_get_visual (widget);
|
attributes.visual = gtk_widget_get_visual (widget);
|
||||||
attributes.colormap = gtk_widget_get_colormap (widget);
|
attributes.colormap = gtk_widget_get_colormap (widget);
|
||||||
@ -1951,6 +1954,7 @@ gtk_clist_draw (GtkWidget * widget,
|
|||||||
GdkRectangle * area)
|
GdkRectangle * area)
|
||||||
{
|
{
|
||||||
GtkCList *clist;
|
GtkCList *clist;
|
||||||
|
gint border_width;
|
||||||
|
|
||||||
g_return_if_fail (widget != NULL);
|
g_return_if_fail (widget != NULL);
|
||||||
g_return_if_fail (GTK_IS_CLIST (widget));
|
g_return_if_fail (GTK_IS_CLIST (widget));
|
||||||
@ -1959,9 +1963,11 @@ gtk_clist_draw (GtkWidget * widget,
|
|||||||
if (GTK_WIDGET_DRAWABLE (widget))
|
if (GTK_WIDGET_DRAWABLE (widget))
|
||||||
{
|
{
|
||||||
clist = GTK_CLIST (widget);
|
clist = GTK_CLIST (widget);
|
||||||
|
border_width = GTK_CONTAINER (widget)->border_width;
|
||||||
|
|
||||||
gdk_window_clear_area (widget->window,
|
gdk_window_clear_area (widget->window,
|
||||||
area->x, area->y,
|
area->x - border_width,
|
||||||
|
area->y - border_width,
|
||||||
area->width, area->height);
|
area->width, area->height);
|
||||||
|
|
||||||
/* draw list shadow/border */
|
/* draw list shadow/border */
|
||||||
|
@ -88,16 +88,19 @@ gtk_event_box_realize (GtkWidget *widget)
|
|||||||
{
|
{
|
||||||
GdkWindowAttr attributes;
|
GdkWindowAttr attributes;
|
||||||
gint attributes_mask;
|
gint attributes_mask;
|
||||||
|
gint border_width;
|
||||||
|
|
||||||
g_return_if_fail (widget != NULL);
|
g_return_if_fail (widget != NULL);
|
||||||
g_return_if_fail (GTK_IS_EVENT_BOX (widget));
|
g_return_if_fail (GTK_IS_EVENT_BOX (widget));
|
||||||
|
|
||||||
GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
|
GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
|
||||||
|
|
||||||
attributes.x = widget->allocation.x;
|
border_width = GTK_CONTAINER (widget)->border_width;
|
||||||
attributes.y = widget->allocation.y;
|
|
||||||
attributes.width = widget->allocation.width;
|
attributes.x = widget->allocation.x + border_width;
|
||||||
attributes.height = widget->allocation.height;
|
attributes.y = widget->allocation.y + border_width;
|
||||||
|
attributes.width = widget->allocation.width - 2*border_width;
|
||||||
|
attributes.height = widget->allocation.height - 2*border_width;
|
||||||
attributes.window_type = GDK_WINDOW_CHILD;
|
attributes.window_type = GDK_WINDOW_CHILD;
|
||||||
attributes.wclass = GDK_INPUT_OUTPUT;
|
attributes.wclass = GDK_INPUT_OUTPUT;
|
||||||
attributes.visual = gtk_widget_get_visual (widget);
|
attributes.visual = gtk_widget_get_visual (widget);
|
||||||
@ -182,19 +185,22 @@ gtk_event_box_draw (GtkWidget *widget,
|
|||||||
GdkRectangle *area)
|
GdkRectangle *area)
|
||||||
{
|
{
|
||||||
GtkBin *bin;
|
GtkBin *bin;
|
||||||
|
GdkRectangle tmp_area;
|
||||||
GdkRectangle child_area;
|
GdkRectangle child_area;
|
||||||
|
|
||||||
g_return_if_fail (widget != NULL);
|
g_return_if_fail (widget != NULL);
|
||||||
g_return_if_fail (GTK_IS_EVENT_BOX (widget));
|
g_return_if_fail (GTK_IS_EVENT_BOX (widget));
|
||||||
g_return_if_fail (area != NULL);
|
|
||||||
|
|
||||||
if (GTK_WIDGET_DRAWABLE (widget))
|
if (GTK_WIDGET_DRAWABLE (widget))
|
||||||
{
|
{
|
||||||
bin = GTK_BIN (widget);
|
bin = GTK_BIN (widget);
|
||||||
|
tmp_area = *area;
|
||||||
|
tmp_area.x -= GTK_CONTAINER (widget)->border_width;
|
||||||
|
tmp_area.y -= GTK_CONTAINER (widget)->border_width;
|
||||||
|
|
||||||
if (bin->child)
|
if (bin->child)
|
||||||
{
|
{
|
||||||
if (gtk_widget_intersect (bin->child, area, &child_area))
|
if (gtk_widget_intersect (bin->child, &tmp_area, &child_area))
|
||||||
gtk_widget_draw (bin->child, &child_area);
|
gtk_widget_draw (bin->child, &child_area);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1278,7 +1278,7 @@ gtk_file_selection_populate (GtkFileSelection *fs,
|
|||||||
{
|
{
|
||||||
possible_count += 1;
|
possible_count += 1;
|
||||||
|
|
||||||
filename = g_strdup (cmpl_this_completion (poss));
|
filename = cmpl_this_completion (poss);
|
||||||
|
|
||||||
text[0] = filename;
|
text[0] = filename;
|
||||||
|
|
||||||
|
@ -698,12 +698,12 @@ gtk_list_button_press (GtkWidget *widget,
|
|||||||
list = GTK_LIST (widget);
|
list = GTK_LIST (widget);
|
||||||
item = gtk_get_event_widget ((GdkEvent*) event);
|
item = gtk_get_event_widget ((GdkEvent*) event);
|
||||||
|
|
||||||
if (!item)
|
while (item && !GTK_IS_LIST_ITEM (item))
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
while (!gtk_type_is_a (GTK_WIDGET_TYPE (item), gtk_list_item_get_type ()))
|
|
||||||
item = item->parent;
|
item = item->parent;
|
||||||
|
|
||||||
|
if (!item || (item->parent != widget))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
gtk_list_select_child (list, item);
|
gtk_list_select_child (list, item);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -279,6 +279,9 @@ gtk_menu_popup (GtkMenu *menu,
|
|||||||
guint button,
|
guint button,
|
||||||
guint32 activate_time)
|
guint32 activate_time)
|
||||||
{
|
{
|
||||||
|
GtkWidget *xgrab_shell;
|
||||||
|
GtkWidget *parent;
|
||||||
|
|
||||||
g_return_if_fail (menu != NULL);
|
g_return_if_fail (menu != NULL);
|
||||||
g_return_if_fail (GTK_IS_MENU (menu));
|
g_return_if_fail (GTK_IS_MENU (menu));
|
||||||
|
|
||||||
@ -292,6 +295,41 @@ gtk_menu_popup (GtkMenu *menu,
|
|||||||
GTK_MENU_SHELL (menu)->activate_time = activate_time;
|
GTK_MENU_SHELL (menu)->activate_time = activate_time;
|
||||||
|
|
||||||
gtk_widget_show (GTK_WIDGET (menu));
|
gtk_widget_show (GTK_WIDGET (menu));
|
||||||
|
|
||||||
|
/* Find the last viewable ancestor, and make an X grab on it
|
||||||
|
*/
|
||||||
|
parent = GTK_WIDGET (menu);
|
||||||
|
xgrab_shell = NULL;
|
||||||
|
while (parent)
|
||||||
|
{
|
||||||
|
gboolean viewable = TRUE;
|
||||||
|
GtkWidget *tmp = parent;
|
||||||
|
|
||||||
|
while (tmp)
|
||||||
|
{
|
||||||
|
if (!GTK_WIDGET_MAPPED (tmp))
|
||||||
|
{
|
||||||
|
viewable = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tmp = tmp->parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (viewable)
|
||||||
|
xgrab_shell = parent;
|
||||||
|
|
||||||
|
parent = GTK_MENU_SHELL (parent)->parent_menu_shell;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (xgrab_shell && (!GTK_MENU_SHELL (xgrab_shell)->have_xgrab))
|
||||||
|
{
|
||||||
|
GTK_MENU_SHELL (xgrab_shell)->have_xgrab =
|
||||||
|
(gdk_pointer_grab (xgrab_shell->window, TRUE,
|
||||||
|
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
|
||||||
|
GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK,
|
||||||
|
NULL, NULL, activate_time) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
gtk_grab_add (GTK_WIDGET (menu));
|
gtk_grab_add (GTK_WIDGET (menu));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -315,7 +353,11 @@ gtk_menu_popdown (GtkMenu *menu)
|
|||||||
menu_shell->active_menu_item = NULL;
|
menu_shell->active_menu_item = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The X Grab, if present, will automatically be removed when we hide
|
||||||
|
* the window */
|
||||||
gtk_widget_hide (GTK_WIDGET (menu));
|
gtk_widget_hide (GTK_WIDGET (menu));
|
||||||
|
menu_shell->have_xgrab = FALSE;
|
||||||
|
|
||||||
gtk_grab_remove (GTK_WIDGET (menu));
|
gtk_grab_remove (GTK_WIDGET (menu));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,6 +53,8 @@ static void gtk_menu_shell_foreach (GtkContainer *container,
|
|||||||
static void gtk_real_menu_shell_deactivate (GtkMenuShell *menu_shell);
|
static void gtk_real_menu_shell_deactivate (GtkMenuShell *menu_shell);
|
||||||
static gint gtk_menu_shell_is_item (GtkMenuShell *menu_shell,
|
static gint gtk_menu_shell_is_item (GtkMenuShell *menu_shell,
|
||||||
GtkWidget *child);
|
GtkWidget *child);
|
||||||
|
static GtkWidget *gtk_menu_shell_get_item (GtkMenuShell *menu_shell,
|
||||||
|
GdkEvent *event);
|
||||||
|
|
||||||
|
|
||||||
static GtkContainerClass *parent_class = NULL;
|
static GtkContainerClass *parent_class = NULL;
|
||||||
@ -302,14 +304,11 @@ gtk_menu_shell_button_press (GtkWidget *widget,
|
|||||||
menu_shell->active = TRUE;
|
menu_shell->active = TRUE;
|
||||||
}
|
}
|
||||||
menu_shell->button = event->button;
|
menu_shell->button = event->button;
|
||||||
|
|
||||||
menu_item = gtk_get_event_widget ((GdkEvent*) event);
|
|
||||||
|
|
||||||
if (!GTK_WIDGET_IS_SENSITIVE (menu_item))
|
menu_item = gtk_menu_shell_get_item (menu_shell, (GdkEvent *)event);
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
if (menu_item && GTK_IS_MENU_ITEM (menu_item) &&
|
if (menu_item &&
|
||||||
gtk_menu_shell_is_item (menu_shell, menu_item))
|
GTK_WIDGET_IS_SENSITIVE (menu_item))
|
||||||
{
|
{
|
||||||
if ((menu_item->parent == widget) &&
|
if ((menu_item->parent == widget) &&
|
||||||
(menu_item != menu_shell->active_menu_item))
|
(menu_item != menu_shell->active_menu_item))
|
||||||
@ -358,16 +357,13 @@ gtk_menu_shell_button_release (GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
|
|
||||||
menu_shell->button = 0;
|
menu_shell->button = 0;
|
||||||
menu_item = gtk_get_event_widget ((GdkEvent*) event);
|
menu_item = gtk_menu_shell_get_item (menu_shell, (GdkEvent*) event);
|
||||||
|
|
||||||
if (!GTK_WIDGET_IS_SENSITIVE (menu_item))
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
deactivate = TRUE;
|
deactivate = TRUE;
|
||||||
|
|
||||||
if ((event->time - menu_shell->activate_time) > MENU_SHELL_TIMEOUT)
|
if ((event->time - menu_shell->activate_time) > MENU_SHELL_TIMEOUT)
|
||||||
{
|
{
|
||||||
if (menu_shell->active_menu_item == menu_item)
|
if (menu_item && (menu_shell->active_menu_item == menu_item))
|
||||||
{
|
{
|
||||||
if (GTK_MENU_ITEM (menu_item)->submenu == NULL)
|
if (GTK_MENU_ITEM (menu_item)->submenu == NULL)
|
||||||
{
|
{
|
||||||
@ -385,15 +381,14 @@ gtk_menu_shell_button_release (GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
deactivate = FALSE;
|
deactivate = FALSE;
|
||||||
|
|
||||||
if ((!deactivate || (menu_shell->active_menu_item == menu_item)) &&
|
/* If the button click was very fast, or we ended up on a submenu,
|
||||||
(gdk_pointer_grab (widget->window, TRUE,
|
* leave the menu up
|
||||||
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
|
*/
|
||||||
GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK,
|
if (!deactivate ||
|
||||||
NULL, NULL, event->time) == 0))
|
(menu_item && (menu_shell->active_menu_item == menu_item)))
|
||||||
{
|
{
|
||||||
deactivate = FALSE;
|
deactivate = FALSE;
|
||||||
menu_shell->have_xgrab = TRUE;
|
|
||||||
menu_shell->ignore_leave = TRUE;
|
menu_shell->ignore_leave = TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -607,3 +602,21 @@ gtk_menu_shell_is_item (GtkMenuShell *menu_shell,
|
|||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GtkWidget *
|
||||||
|
gtk_menu_shell_get_item (GtkMenuShell *menu_shell,
|
||||||
|
GdkEvent *event)
|
||||||
|
{
|
||||||
|
GtkWidget *menu_item;
|
||||||
|
|
||||||
|
menu_item = gtk_get_event_widget ((GdkEvent*) event);
|
||||||
|
|
||||||
|
while (menu_item && !GTK_IS_MENU_ITEM (menu_item))
|
||||||
|
menu_item = menu_item->parent;
|
||||||
|
|
||||||
|
if (menu_item && gtk_menu_shell_is_item (menu_shell, menu_item))
|
||||||
|
return menu_item;
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -497,6 +497,7 @@ gtk_text_init (GtkText *text)
|
|||||||
text->tab_stops = g_list_prepend (text->tab_stops, (void*)8);
|
text->tab_stops = g_list_prepend (text->tab_stops, (void*)8);
|
||||||
|
|
||||||
text->line_wrap = TRUE;
|
text->line_wrap = TRUE;
|
||||||
|
text->word_wrap = FALSE;
|
||||||
|
|
||||||
text->timer = 0;
|
text->timer = 0;
|
||||||
text->button = 0;
|
text->button = 0;
|
||||||
|
@ -299,9 +299,12 @@ gtk_tree_button_press (GtkWidget *widget,
|
|||||||
tree = GTK_TREE (widget);
|
tree = GTK_TREE (widget);
|
||||||
item = gtk_get_event_widget ((GdkEvent*) event);
|
item = gtk_get_event_widget ((GdkEvent*) event);
|
||||||
|
|
||||||
while (!gtk_type_is_a (GTK_WIDGET_TYPE (item), gtk_tree_item_get_type ()))
|
while (item && !GTK_IS_TREE_ITEM (item))
|
||||||
item = item->parent;
|
item = item->parent;
|
||||||
|
|
||||||
|
if (!item || (item->parent != widget))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
switch(event->button)
|
switch(event->button)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -391,6 +391,7 @@ gtk_viewport_draw (GtkWidget *widget,
|
|||||||
GtkBin *bin;
|
GtkBin *bin;
|
||||||
GdkRectangle tmp_area;
|
GdkRectangle tmp_area;
|
||||||
GdkRectangle child_area;
|
GdkRectangle child_area;
|
||||||
|
gint border_width;
|
||||||
|
|
||||||
g_return_if_fail (widget != NULL);
|
g_return_if_fail (widget != NULL);
|
||||||
g_return_if_fail (GTK_IS_VIEWPORT (widget));
|
g_return_if_fail (GTK_IS_VIEWPORT (widget));
|
||||||
@ -401,13 +402,18 @@ gtk_viewport_draw (GtkWidget *widget,
|
|||||||
viewport = GTK_VIEWPORT (widget);
|
viewport = GTK_VIEWPORT (widget);
|
||||||
bin = GTK_BIN (widget);
|
bin = GTK_BIN (widget);
|
||||||
|
|
||||||
gtk_viewport_paint (widget, area);
|
border_width = GTK_CONTAINER (widget)->border_width;
|
||||||
|
|
||||||
|
tmp_area = *area;
|
||||||
|
tmp_area.x -= border_width;
|
||||||
|
tmp_area.y -= border_width;
|
||||||
|
|
||||||
|
gtk_viewport_paint (widget, &tmp_area);
|
||||||
|
|
||||||
if (bin->child)
|
if (bin->child)
|
||||||
{
|
{
|
||||||
tmp_area = *area;
|
tmp_area.x += viewport->hadjustment->value - widget->style->klass->xthickness;
|
||||||
tmp_area.x += viewport->hadjustment->value;
|
tmp_area.y += viewport->vadjustment->value - widget->style->klass->ythickness;
|
||||||
tmp_area.y += viewport->vadjustment->value;
|
|
||||||
|
|
||||||
if (gtk_widget_intersect (bin->child, &tmp_area, &child_area))
|
if (gtk_widget_intersect (bin->child, &tmp_area, &child_area))
|
||||||
gtk_widget_draw (bin->child, &child_area);
|
gtk_widget_draw (bin->child, &child_area);
|
||||||
@ -508,6 +514,7 @@ gtk_viewport_size_allocate (GtkWidget *widget,
|
|||||||
GtkBin *bin;
|
GtkBin *bin;
|
||||||
GtkAllocation child_allocation;
|
GtkAllocation child_allocation;
|
||||||
gint hval, vval;
|
gint hval, vval;
|
||||||
|
gint border_width;
|
||||||
|
|
||||||
g_return_if_fail (widget != NULL);
|
g_return_if_fail (widget != NULL);
|
||||||
g_return_if_fail (GTK_IS_VIEWPORT (widget));
|
g_return_if_fail (GTK_IS_VIEWPORT (widget));
|
||||||
@ -517,6 +524,8 @@ gtk_viewport_size_allocate (GtkWidget *widget,
|
|||||||
viewport = GTK_VIEWPORT (widget);
|
viewport = GTK_VIEWPORT (widget);
|
||||||
bin = GTK_BIN (widget);
|
bin = GTK_BIN (widget);
|
||||||
|
|
||||||
|
border_width = GTK_CONTAINER (widget)->border_width;
|
||||||
|
|
||||||
child_allocation.x = 0;
|
child_allocation.x = 0;
|
||||||
child_allocation.y = 0;
|
child_allocation.y = 0;
|
||||||
|
|
||||||
@ -526,16 +535,16 @@ gtk_viewport_size_allocate (GtkWidget *widget,
|
|||||||
child_allocation.y = GTK_WIDGET (viewport)->style->klass->ythickness;
|
child_allocation.y = GTK_WIDGET (viewport)->style->klass->ythickness;
|
||||||
}
|
}
|
||||||
|
|
||||||
child_allocation.width = allocation->width - child_allocation.x * 2;
|
child_allocation.width = allocation->width - child_allocation.x * 2 - border_width * 2;
|
||||||
child_allocation.height = allocation->height - child_allocation.y * 2;
|
child_allocation.height = allocation->height - child_allocation.y * 2 - border_width * 2;
|
||||||
|
|
||||||
if (GTK_WIDGET_REALIZED (widget))
|
if (GTK_WIDGET_REALIZED (widget))
|
||||||
{
|
{
|
||||||
gdk_window_move_resize (widget->window,
|
gdk_window_move_resize (widget->window,
|
||||||
allocation->x + GTK_CONTAINER (viewport)->border_width,
|
allocation->x + border_width,
|
||||||
allocation->y + GTK_CONTAINER (viewport)->border_width,
|
allocation->y + border_width,
|
||||||
allocation->width - GTK_CONTAINER (viewport)->border_width * 2,
|
allocation->width - border_width * 2,
|
||||||
allocation->height - GTK_CONTAINER (viewport)->border_width * 2);
|
allocation->height - border_width * 2);
|
||||||
|
|
||||||
gdk_window_move_resize (viewport->view_window,
|
gdk_window_move_resize (viewport->view_window,
|
||||||
child_allocation.x,
|
child_allocation.x,
|
||||||
|
Loading…
Reference in New Issue
Block a user