diff options
author | Tim Janik <timj@gimp.org> | 1998-02-27 16:31:06 +0000 |
---|---|---|
committer | Tim Janik <timj@src.gnome.org> | 1998-02-27 16:31:06 +0000 |
commit | 693fa02b839c54d0670f39df3f6dfde98a4d7788 (patch) | |
tree | 6213e60524c0c7e9d7bb469b0f9cdaf38ea60f6b /gtk/gtktipsquery.c | |
parent | a36ffb12a5e730c6f811bdf4c53ad0f1ffc95161 (diff) | |
download | gtk+-693fa02b839c54d0670f39df3f6dfde98a4d7788.tar.gz |
we make an active server grab now, this way we can change the cursor
Fri Feb 27 15:31:55 1998 Tim Janik <timj@gimp.org>
* gtk/gtktipsquery.c: we make an active server grab now, this way we
can change the cursor globally and don't need to tweak event masks
of other windows.
* gtk/gtkframe.c (gtk_frame_style_set): recompute label size.
* gtk/gtkwidget.h:
* gtk/gtkwidget.c:
New signal GtkWidget::style_set to be emitted when a widget's style
changed. New flag GTK_RC_STYLE to indicate whether an rc lookup has
been perfomed for the widget.
(gtk_widget_ensure_style): New function.
(gtk_widget_set_rc_style): New function.
* docs/styles.txt: new file.
Diffstat (limited to 'gtk/gtktipsquery.c')
-rw-r--r-- | gtk/gtktipsquery.c | 79 |
1 files changed, 30 insertions, 49 deletions
diff --git a/gtk/gtktipsquery.c b/gtk/gtktipsquery.c index 22fa1b0aa5..8bb54ab66b 100644 --- a/gtk/gtktipsquery.c +++ b/gtk/gtktipsquery.c @@ -82,7 +82,6 @@ static void gtk_tips_query_widget_entered (GtkTipsQuery *tips_query, /* --- variables --- */ static GtkLabelClass *parent_class = NULL; static gint tips_query_signals[SIGNAL_LAST] = { 0 }; -static const gchar *key_event_mask = "gtk-tips-query-saved-event-mask"; /* --- functions --- */ @@ -215,7 +214,7 @@ gtk_tips_query_init (GtkTipsQuery *tips_query) tips_query->label_no_tip = g_strdup ("--- No Tip ---"); tips_query->caller = NULL; tips_query->last_crossed = NULL; - tips_query->event_restore_list = NULL; + tips_query->query_cursor = NULL; gtk_label_set (GTK_LABEL (tips_query), tips_query->label_inactive); } @@ -344,6 +343,7 @@ gtk_tips_query_start_query (GtkTipsQuery *tips_query) g_return_if_fail (tips_query != NULL); g_return_if_fail (GTK_IS_TIPS_QUERY (tips_query)); g_return_if_fail (tips_query->in_query == FALSE); + g_return_if_fail (GTK_WIDGET_REALIZED (tips_query)); tips_query->in_query = TRUE; gtk_signal_emit (GTK_OBJECT (tips_query), tips_query_signals[SIGNAL_START_QUERY]); @@ -360,51 +360,49 @@ gtk_tips_query_stop_query (GtkTipsQuery *tips_query) tips_query->in_query = FALSE; } -void +static void gtk_tips_query_real_start_query (GtkTipsQuery *tips_query) { + gint failure; + g_return_if_fail (tips_query != NULL); g_return_if_fail (GTK_IS_TIPS_QUERY (tips_query)); - + + tips_query->query_cursor = gdk_cursor_new (GDK_QUESTION_ARROW); + failure = gdk_pointer_grab (GTK_WIDGET (tips_query)->window, + TRUE, + GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | + GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK, + NULL, + tips_query->query_cursor, + GDK_CURRENT_TIME); + if (failure) + { + gdk_cursor_destroy (tips_query->query_cursor); + tips_query->query_cursor = NULL; + } gtk_grab_add (GTK_WIDGET (tips_query)); } -void +static void gtk_tips_query_real_stop_query (GtkTipsQuery *tips_query) { - GSList *list; - g_return_if_fail (tips_query != NULL); g_return_if_fail (GTK_IS_TIPS_QUERY (tips_query)); gtk_grab_remove (GTK_WIDGET (tips_query)); + if (tips_query->query_cursor) + { + gdk_pointer_ungrab (GDK_CURRENT_TIME); + gdk_cursor_destroy (tips_query->query_cursor); + tips_query->query_cursor = NULL; + } if (tips_query->last_crossed) { gtk_widget_unref (tips_query->last_crossed); tips_query->last_crossed = NULL; } - list = tips_query->event_restore_list; - while (list) - { - GtkWidget *win_widget; - GdkEventMask *event_mask; - - win_widget = list->data; - event_mask = gtk_object_get_data (GTK_OBJECT (win_widget), key_event_mask); - if (event_mask) - { - gtk_object_remove_data (GTK_OBJECT (win_widget), key_event_mask); - if (GTK_WIDGET_REALIZED (win_widget)) - gdk_window_set_events (win_widget->window, *event_mask); - g_free (event_mask); - } - gtk_widget_unref (win_widget); - list = list->next; - } - g_slist_free (tips_query->event_restore_list); - tips_query->event_restore_list = NULL; - gtk_label_set (GTK_LABEL (tips_query), tips_query->label_inactive); } @@ -488,7 +486,6 @@ gtk_tips_query_event (GtkWidget *widget, event_handled = FALSE; switch (event->type) { - GdkEventMask *event_mask; GdkWindow *pointer_window; case GDK_LEAVE_NOTIFY: @@ -499,27 +496,11 @@ gtk_tips_query_event (GtkWidget *widget, event_widget = NULL; if (pointer_window) gdk_window_get_user_data (pointer_window, (gpointer*) &event_widget); - /* fall through */ + gtk_tips_query_emit_widget_entered (tips_query, event_widget); + event_handled = TRUE; + break; + case GDK_ENTER_NOTIFY: - if (event_widget) - { - event_mask = gtk_object_get_data (GTK_OBJECT (event_widget), key_event_mask); - if (!event_mask) - { - event_mask = g_new (GdkEventMask, 1); - *event_mask = gdk_window_get_events (event_widget->window); - gtk_object_set_data (GTK_OBJECT (event_widget), key_event_mask, event_mask); - gdk_window_set_events (event_widget->window, - *event_mask | - GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK | - GDK_ENTER_NOTIFY_MASK | - GDK_LEAVE_NOTIFY_MASK); - tips_query->event_restore_list = - g_slist_prepend (tips_query->event_restore_list, event_widget); - gtk_widget_ref (event_widget); - } - } gtk_tips_query_emit_widget_entered (tips_query, event_widget); event_handled = TRUE; break; |