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.
This commit is contained in:
Tim Janik
1998-02-27 16:31:06 +00:00
committed by Tim Janik
parent a36ffb12a5
commit 693fa02b83
23 changed files with 708 additions and 422 deletions

View File

@ -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;