]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtktipsquery.c
System fnmatch wasn't going to be UTF-8 clean, neither was our version.
[~andy/gtk] / gtk / gtktipsquery.c
index 9048031ba11f8e172239ad67c239c272d0c83722..389e6aa10bc9087e35d4a1b893519c48425bdf1d 100644 (file)
@@ -5,24 +5,36 @@
  * Copyright (C) 1998 Tim Janik
  *
  * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2 of the License, or (at your option) any later version.
  *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Library General Public License for more details.
+ * Lesser General Public License for more details.
  *
- * You should have received a copy of the GNU Library General Public
+ * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the
  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  */
+
+/*
+ * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GTK+ Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#undef GTK_DISABLE_DEPRECATED
+
 #include       "gtktipsquery.h"
 #include       "gtksignal.h"
 #include       "gtktooltips.h"
 #include       "gtkmain.h"
+#include        "gtkmarshalers.h"
+#include       "gtkintl.h"
 
 
 
@@ -45,18 +57,6 @@ enum
   SIGNAL_WIDGET_SELECTED,
   SIGNAL_LAST
 };
-typedef        void    (*SignalWidgetEntered)          (GtkObject      *object,
-                                                GtkWidget      *widget,
-                                                const gchar    *tip_text,
-                                                const gchar    *tip_private,
-                                                gpointer        func_data);
-typedef        gint    (*SignalWidgetSelected)         (GtkObject      *object,
-                                                GtkWidget      *widget,
-                                                const gchar    *tip_text,
-                                                const gchar    *tip_private,
-                                                GdkEventButton *event,
-                                                gpointer        func_data);
-
 
 /* --- prototypes --- */
 static void    gtk_tips_query_class_init       (GtkTipsQueryClass      *class);
@@ -64,10 +64,10 @@ static void gtk_tips_query_init             (GtkTipsQuery           *tips_query);
 static void    gtk_tips_query_destroy          (GtkObject              *object);
 static gint    gtk_tips_query_event            (GtkWidget              *widget,
                                                 GdkEvent               *event);
-static void    gtk_tips_query_set_arg          (GtkTipsQuery           *tips_query,
+static void    gtk_tips_query_set_arg          (GtkObject              *object,
                                                 GtkArg                 *arg,
                                                 guint                   arg_id);
-static void    gtk_tips_query_get_arg          (GtkTipsQuery           *tips_query,
+static void    gtk_tips_query_get_arg          (GtkObject              *object,
                                                 GtkArg                 *arg,
                                                 guint                  arg_id);
 static void    gtk_tips_query_real_start_query (GtkTipsQuery           *tips_query);
@@ -84,22 +84,23 @@ static guint                 tips_query_signals[SIGNAL_LAST] = { 0 };
 
 
 /* --- functions --- */
-guint
+GtkType
 gtk_tips_query_get_type (void)
 {
-  static guint tips_query_type = 0;
+  static GtkType tips_query_type = 0;
 
   if (!tips_query_type)
     {
-      GtkTypeInfo tips_query_info =
+      static const GtkTypeInfo tips_query_info =
       {
        "GtkTipsQuery",
        sizeof (GtkTipsQuery),
        sizeof (GtkTipsQueryClass),
        (GtkClassInitFunc) gtk_tips_query_class_init,
        (GtkObjectInitFunc) gtk_tips_query_init,
-       (GtkArgSetFunc) gtk_tips_query_set_arg,
-       (GtkArgGetFunc) gtk_tips_query_get_arg,
+        /* reserved_1 */ NULL,
+       /* reserved_2 */ NULL,
+       (GtkClassInitFunc) NULL,
       };
 
       tips_query_type = gtk_type_unique (gtk_label_get_type (), &tips_query_info);
@@ -108,40 +109,6 @@ gtk_tips_query_get_type (void)
   return tips_query_type;
 }
 
-static void
-gtk_tips_query_marshal_widget_entered (GtkObject      *object,
-                                      GtkSignalFunc  func,
-                                      gpointer       func_data,
-                                      GtkArg         *args)
-{
-  SignalWidgetEntered sfunc = (SignalWidgetEntered) func;
-
-  (* sfunc) (object,
-            (GtkWidget*) GTK_VALUE_OBJECT (args[0]),
-            GTK_VALUE_STRING (args[1]),
-            GTK_VALUE_STRING (args[2]),
-            func_data);
-}
-
-static void
-gtk_tips_query_marshal_widget_selected (GtkObject      *object,
-                                       GtkSignalFunc  func,
-                                       gpointer       func_data,
-                                       GtkArg         *args)
-{
-  gint *return_val;
-
-  SignalWidgetSelected sfunc = (SignalWidgetSelected) func;
-  return_val = GTK_RETLOC_BOOL (args[4]);
-  
-  *return_val = (* sfunc) (object,
-                          (GtkWidget*) GTK_VALUE_OBJECT (args[0]),
-                          GTK_VALUE_STRING (args[1]),
-                          GTK_VALUE_STRING (args[2]),
-                          GTK_VALUE_BOXED (args[3]),
-                          func_data);
-}
-
 static void
 gtk_tips_query_class_init (GtkTipsQueryClass *class)
 {
@@ -153,6 +120,18 @@ gtk_tips_query_class_init (GtkTipsQueryClass *class)
 
   parent_class = gtk_type_class (gtk_label_get_type ());
 
+
+  object_class->set_arg = gtk_tips_query_set_arg;
+  object_class->get_arg = gtk_tips_query_get_arg;
+  object_class->destroy = gtk_tips_query_destroy;
+
+  widget_class->event = gtk_tips_query_event;
+
+  class->start_query = gtk_tips_query_real_start_query;
+  class->stop_query = gtk_tips_query_real_stop_query;
+  class->widget_entered = gtk_tips_query_widget_entered;
+  class->widget_selected = NULL;
+
   gtk_object_add_arg_type ("GtkTipsQuery::emit_always", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_EMIT_ALWAYS);
   gtk_object_add_arg_type ("GtkTipsQuery::caller", GTK_TYPE_WIDGET, GTK_ARG_READWRITE, ARG_CALLER);
   gtk_object_add_arg_type ("GtkTipsQuery::label_inactive", GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_LABEL_INACTIVE);
@@ -161,47 +140,39 @@ gtk_tips_query_class_init (GtkTipsQueryClass *class)
   tips_query_signals[SIGNAL_START_QUERY] =
     gtk_signal_new ("start_query",
                    GTK_RUN_FIRST,
-                   object_class->type,
+                   GTK_CLASS_TYPE (object_class),
                    GTK_SIGNAL_OFFSET (GtkTipsQueryClass, start_query),
-                   gtk_signal_default_marshaller,
+                   _gtk_marshal_VOID__VOID,
                    GTK_TYPE_NONE, 0);
   tips_query_signals[SIGNAL_STOP_QUERY] =
     gtk_signal_new ("stop_query",
                    GTK_RUN_FIRST,
-                   object_class->type,
+                   GTK_CLASS_TYPE (object_class),
                    GTK_SIGNAL_OFFSET (GtkTipsQueryClass, stop_query),
-                   gtk_signal_default_marshaller,
+                   _gtk_marshal_VOID__VOID,
                    GTK_TYPE_NONE, 0);
   tips_query_signals[SIGNAL_WIDGET_ENTERED] =
     gtk_signal_new ("widget_entered",
                    GTK_RUN_LAST,
-                   object_class->type,
+                   GTK_CLASS_TYPE (object_class),
                    GTK_SIGNAL_OFFSET (GtkTipsQueryClass, widget_entered),
-                   gtk_tips_query_marshal_widget_entered,
+                   _gtk_marshal_VOID__OBJECT_STRING_STRING,
                    GTK_TYPE_NONE, 3,
                    GTK_TYPE_WIDGET,
                    GTK_TYPE_STRING,
                    GTK_TYPE_STRING);
   tips_query_signals[SIGNAL_WIDGET_SELECTED] =
-    gtk_signal_new ("widget_selected",
-                   GTK_RUN_FIRST,
-                   object_class->type,
-                   GTK_SIGNAL_OFFSET (GtkTipsQueryClass, widget_selected),
-                   gtk_tips_query_marshal_widget_selected,
-                   GTK_TYPE_INT, 4,
-                   GTK_TYPE_WIDGET,
-                   GTK_TYPE_STRING,
-                   GTK_TYPE_STRING,
-                   GTK_TYPE_BOXED);
-  gtk_object_class_add_signals (object_class, tips_query_signals, SIGNAL_LAST);
-
-  object_class->destroy = gtk_tips_query_destroy;
-  widget_class->event = gtk_tips_query_event;
-
-  class->start_query = gtk_tips_query_real_start_query;
-  class->stop_query = gtk_tips_query_real_stop_query;
-  class->widget_entered = gtk_tips_query_widget_entered;
-  class->widget_selected = NULL;
+    g_signal_new ("widget_selected",
+                  G_TYPE_FROM_CLASS(object_class),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET(GtkTipsQueryClass, widget_selected),
+                  _gtk_boolean_handled_accumulator, NULL,
+                  _gtk_marshal_BOOLEAN__OBJECT_STRING_STRING_BOXED,
+                  G_TYPE_BOOLEAN, 4,
+                  GTK_TYPE_WIDGET,
+                  G_TYPE_STRING,
+                  G_TYPE_STRING,
+                  GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
 }
 
 static void
@@ -210,19 +181,23 @@ gtk_tips_query_init (GtkTipsQuery *tips_query)
   tips_query->emit_always = FALSE;
   tips_query->in_query = FALSE;
   tips_query->label_inactive = g_strdup ("");
-  tips_query->label_no_tip = g_strdup ("--- No Tip ---");
+  tips_query->label_no_tip = g_strdup (_("--- No Tip ---"));
   tips_query->caller = NULL;
   tips_query->last_crossed = NULL;
   tips_query->query_cursor = NULL;
 
-  gtk_label_set (GTK_LABEL (tips_query), tips_query->label_inactive);
+  gtk_label_set_text (GTK_LABEL (tips_query), tips_query->label_inactive);
 }
 
 static void
-gtk_tips_query_set_arg (GtkTipsQuery           *tips_query,
+gtk_tips_query_set_arg (GtkObject              *object,
                        GtkArg                 *arg,
                        guint                   arg_id)
 {
+  GtkTipsQuery *tips_query;
+
+  tips_query = GTK_TIPS_QUERY (object);
+
   switch (arg_id)
     {
     case ARG_EMIT_ALWAYS:
@@ -238,16 +213,19 @@ gtk_tips_query_set_arg (GtkTipsQuery           *tips_query,
       gtk_tips_query_set_labels (tips_query, tips_query->label_inactive, GTK_VALUE_STRING (*arg));
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
       break;
     }
 }
 
 static void
-gtk_tips_query_get_arg (GtkTipsQuery           *tips_query,
-                       GtkArg                 *arg,
+gtk_tips_query_get_arg (GtkObject             *object,
+                       GtkArg                *arg,
                        guint                  arg_id)
 {
+  GtkTipsQuery *tips_query;
+
+  tips_query = GTK_TIPS_QUERY (object);
+
   switch (arg_id)
     {
     case ARG_EMIT_ALWAYS:
@@ -273,7 +251,6 @@ gtk_tips_query_destroy (GtkObject   *object)
 {
   GtkTipsQuery *tips_query;
 
-  g_return_if_fail (object != NULL);
   g_return_if_fail (GTK_IS_TIPS_QUERY (object));
 
   tips_query = GTK_TIPS_QUERY (object);
@@ -283,6 +260,11 @@ gtk_tips_query_destroy (GtkObject  *object)
 
   gtk_tips_query_set_caller (tips_query, NULL);
 
+  g_free (tips_query->label_inactive);
+  tips_query->label_inactive = NULL;
+  g_free (tips_query->label_no_tip);
+  tips_query->label_no_tip = NULL;
+
   if (GTK_OBJECT_CLASS (parent_class)->destroy)
     (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
 }
@@ -304,7 +286,6 @@ gtk_tips_query_set_labels (GtkTipsQuery   *tips_query,
 {
   gchar *old;
 
-  g_return_if_fail (tips_query != NULL);
   g_return_if_fail (GTK_IS_TIPS_QUERY (tips_query));
   g_return_if_fail (label_inactive != NULL);
   g_return_if_fail (label_no_tip != NULL);
@@ -321,7 +302,6 @@ void
 gtk_tips_query_set_caller (GtkTipsQuery   *tips_query,
                           GtkWidget       *caller)
 {
-  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);
   if (caller)
@@ -339,7 +319,6 @@ gtk_tips_query_set_caller (GtkTipsQuery   *tips_query,
 void
 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));
@@ -351,7 +330,6 @@ gtk_tips_query_start_query (GtkTipsQuery *tips_query)
 void
 gtk_tips_query_stop_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 == TRUE);
 
@@ -364,10 +342,10 @@ 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);
+  tips_query->query_cursor = gdk_cursor_new_for_display (gtk_widget_get_display (GTK_WIDGET (tips_query)),
+                                                        GDK_QUESTION_ARROW);
   failure = gdk_pointer_grab (GTK_WIDGET (tips_query)->window,
                              TRUE,
                              GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
@@ -377,7 +355,7 @@ gtk_tips_query_real_start_query (GtkTipsQuery *tips_query)
                              GDK_CURRENT_TIME);
   if (failure)
     {
-      gdk_cursor_destroy (tips_query->query_cursor);
+      gdk_cursor_unref (tips_query->query_cursor);
       tips_query->query_cursor = NULL;
     }
   gtk_grab_add (GTK_WIDGET (tips_query));
@@ -386,14 +364,14 @@ gtk_tips_query_real_start_query (GtkTipsQuery *tips_query)
 static void
 gtk_tips_query_real_stop_query (GtkTipsQuery *tips_query)
 {
-  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);
+      gdk_display_pointer_ungrab (gtk_widget_get_display (GTK_WIDGET (tips_query)),
+                                 GDK_CURRENT_TIME);
+      gdk_cursor_unref (tips_query->query_cursor);
       tips_query->query_cursor = NULL;
     }
   if (tips_query->last_crossed)
@@ -402,7 +380,7 @@ gtk_tips_query_real_stop_query (GtkTipsQuery *tips_query)
       tips_query->last_crossed = NULL;
     }
   
-  gtk_label_set (GTK_LABEL (tips_query), tips_query->label_inactive);
+  gtk_label_set_text (GTK_LABEL (tips_query), tips_query->label_inactive);
 }
 
 static void
@@ -411,14 +389,13 @@ gtk_tips_query_widget_entered (GtkTipsQuery   *tips_query,
                               const gchar    *tip_text,
                               const gchar    *tip_private)
 {
-  g_return_if_fail (tips_query != NULL);
   g_return_if_fail (GTK_IS_TIPS_QUERY (tips_query));
 
   if (!tip_text)
     tip_text = tips_query->label_no_tip;
 
   if (!g_str_equal (GTK_LABEL (tips_query)->label, (gchar*) tip_text))
-    gtk_label_set (GTK_LABEL (tips_query), tip_text);
+    gtk_label_set_text (GTK_LABEL (tips_query), tip_text);
 }
 
 static void
@@ -468,7 +445,6 @@ gtk_tips_query_event (GtkWidget            *widget,
   GtkWidget *event_widget;
   gboolean event_handled;
   
-  g_return_val_if_fail (widget != NULL, FALSE);
   g_return_val_if_fail (GTK_IS_TIPS_QUERY (widget), FALSE);
 
   tips_query = GTK_TIPS_QUERY (widget);