summaryrefslogtreecommitdiff
path: root/gtk/gtktipsquery.c
diff options
context:
space:
mode:
authorTim Janik <timj@gimp.org>1998-02-27 16:31:06 +0000
committerTim Janik <timj@src.gnome.org>1998-02-27 16:31:06 +0000
commit693fa02b839c54d0670f39df3f6dfde98a4d7788 (patch)
tree6213e60524c0c7e9d7bb469b0f9cdaf38ea60f6b /gtk/gtktipsquery.c
parenta36ffb12a5e730c6f811bdf4c53ad0f1ffc95161 (diff)
downloadgtk+-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.c79
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;