summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog29
-rw-r--r--ChangeLog.pre-2-029
-rw-r--r--ChangeLog.pre-2-1029
-rw-r--r--ChangeLog.pre-2-229
-rw-r--r--ChangeLog.pre-2-429
-rw-r--r--ChangeLog.pre-2-629
-rw-r--r--ChangeLog.pre-2-829
-rw-r--r--gtk/gtkobject.c2
-rw-r--r--gtk/gtkspinbutton.c3
-rw-r--r--gtk/gtkstatusbar.c125
-rw-r--r--gtk/gtkstatusbar.h27
-rw-r--r--gtk/gtkwidget.c19
-rw-r--r--gtk/testgtk.c140
-rw-r--r--tests/testgtk.c140
14 files changed, 496 insertions, 163 deletions
diff --git a/ChangeLog b/ChangeLog
index 55879d6c36..f9c4bb9719 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,32 @@
+Sun Mar 1 22:59:09 1998 Tim Janik <timj@gimp.org>
+
+ * gtk/gtkstatusbar.h:
+ * gtk/gtkstatusbar.c: complete api change to honour message contexts.
+ unfortunaltely this also involved argument changes on the signal
+ emissions which will not be caught by the compiler. your callbacks
+ should look like:
+ void message_text_popped (GtkStatusbar *statusbar,
+ guint context_id,
+ const gchar *text,
+ gpointer func_data);
+
+ * gtk/gtkwidget.c (gtk_widget_set_rc_style): eliminated bug about
+ initial signal emission.
+ (gtk_widget_set_parent): don't ensure style, just call
+ gtk_widget_set_style_recurse.
+ (gtk_widget_set_style_recurse): only change a widget's rc styles if
+ if there has already been a lookup.
+
+ * gtk/testgtk.c: adaptions for statusbar widget.
+ substituted notebook pixmaps with pixmaps from fvwm, since
+ we don't know where the originals came from.
+
+ * gtk/gtkobject.c (gtk_object_data_destroy): call the destroy
+ notifier with the objects data, not its internal structure.
+
+ * gtk/gtkspinbutton.c (gtk_spin_button_button_press): small
+ fix from lars.
+
Sun Mar 1 15:08:13 CST 1998 Shawn T. Amundson <amundson@gimp.org>
* docs/*.texi changes from Greg Mclean.
diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0
index 55879d6c36..f9c4bb9719 100644
--- a/ChangeLog.pre-2-0
+++ b/ChangeLog.pre-2-0
@@ -1,3 +1,32 @@
+Sun Mar 1 22:59:09 1998 Tim Janik <timj@gimp.org>
+
+ * gtk/gtkstatusbar.h:
+ * gtk/gtkstatusbar.c: complete api change to honour message contexts.
+ unfortunaltely this also involved argument changes on the signal
+ emissions which will not be caught by the compiler. your callbacks
+ should look like:
+ void message_text_popped (GtkStatusbar *statusbar,
+ guint context_id,
+ const gchar *text,
+ gpointer func_data);
+
+ * gtk/gtkwidget.c (gtk_widget_set_rc_style): eliminated bug about
+ initial signal emission.
+ (gtk_widget_set_parent): don't ensure style, just call
+ gtk_widget_set_style_recurse.
+ (gtk_widget_set_style_recurse): only change a widget's rc styles if
+ if there has already been a lookup.
+
+ * gtk/testgtk.c: adaptions for statusbar widget.
+ substituted notebook pixmaps with pixmaps from fvwm, since
+ we don't know where the originals came from.
+
+ * gtk/gtkobject.c (gtk_object_data_destroy): call the destroy
+ notifier with the objects data, not its internal structure.
+
+ * gtk/gtkspinbutton.c (gtk_spin_button_button_press): small
+ fix from lars.
+
Sun Mar 1 15:08:13 CST 1998 Shawn T. Amundson <amundson@gimp.org>
* docs/*.texi changes from Greg Mclean.
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index 55879d6c36..f9c4bb9719 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,32 @@
+Sun Mar 1 22:59:09 1998 Tim Janik <timj@gimp.org>
+
+ * gtk/gtkstatusbar.h:
+ * gtk/gtkstatusbar.c: complete api change to honour message contexts.
+ unfortunaltely this also involved argument changes on the signal
+ emissions which will not be caught by the compiler. your callbacks
+ should look like:
+ void message_text_popped (GtkStatusbar *statusbar,
+ guint context_id,
+ const gchar *text,
+ gpointer func_data);
+
+ * gtk/gtkwidget.c (gtk_widget_set_rc_style): eliminated bug about
+ initial signal emission.
+ (gtk_widget_set_parent): don't ensure style, just call
+ gtk_widget_set_style_recurse.
+ (gtk_widget_set_style_recurse): only change a widget's rc styles if
+ if there has already been a lookup.
+
+ * gtk/testgtk.c: adaptions for statusbar widget.
+ substituted notebook pixmaps with pixmaps from fvwm, since
+ we don't know where the originals came from.
+
+ * gtk/gtkobject.c (gtk_object_data_destroy): call the destroy
+ notifier with the objects data, not its internal structure.
+
+ * gtk/gtkspinbutton.c (gtk_spin_button_button_press): small
+ fix from lars.
+
Sun Mar 1 15:08:13 CST 1998 Shawn T. Amundson <amundson@gimp.org>
* docs/*.texi changes from Greg Mclean.
diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2
index 55879d6c36..f9c4bb9719 100644
--- a/ChangeLog.pre-2-2
+++ b/ChangeLog.pre-2-2
@@ -1,3 +1,32 @@
+Sun Mar 1 22:59:09 1998 Tim Janik <timj@gimp.org>
+
+ * gtk/gtkstatusbar.h:
+ * gtk/gtkstatusbar.c: complete api change to honour message contexts.
+ unfortunaltely this also involved argument changes on the signal
+ emissions which will not be caught by the compiler. your callbacks
+ should look like:
+ void message_text_popped (GtkStatusbar *statusbar,
+ guint context_id,
+ const gchar *text,
+ gpointer func_data);
+
+ * gtk/gtkwidget.c (gtk_widget_set_rc_style): eliminated bug about
+ initial signal emission.
+ (gtk_widget_set_parent): don't ensure style, just call
+ gtk_widget_set_style_recurse.
+ (gtk_widget_set_style_recurse): only change a widget's rc styles if
+ if there has already been a lookup.
+
+ * gtk/testgtk.c: adaptions for statusbar widget.
+ substituted notebook pixmaps with pixmaps from fvwm, since
+ we don't know where the originals came from.
+
+ * gtk/gtkobject.c (gtk_object_data_destroy): call the destroy
+ notifier with the objects data, not its internal structure.
+
+ * gtk/gtkspinbutton.c (gtk_spin_button_button_press): small
+ fix from lars.
+
Sun Mar 1 15:08:13 CST 1998 Shawn T. Amundson <amundson@gimp.org>
* docs/*.texi changes from Greg Mclean.
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index 55879d6c36..f9c4bb9719 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -1,3 +1,32 @@
+Sun Mar 1 22:59:09 1998 Tim Janik <timj@gimp.org>
+
+ * gtk/gtkstatusbar.h:
+ * gtk/gtkstatusbar.c: complete api change to honour message contexts.
+ unfortunaltely this also involved argument changes on the signal
+ emissions which will not be caught by the compiler. your callbacks
+ should look like:
+ void message_text_popped (GtkStatusbar *statusbar,
+ guint context_id,
+ const gchar *text,
+ gpointer func_data);
+
+ * gtk/gtkwidget.c (gtk_widget_set_rc_style): eliminated bug about
+ initial signal emission.
+ (gtk_widget_set_parent): don't ensure style, just call
+ gtk_widget_set_style_recurse.
+ (gtk_widget_set_style_recurse): only change a widget's rc styles if
+ if there has already been a lookup.
+
+ * gtk/testgtk.c: adaptions for statusbar widget.
+ substituted notebook pixmaps with pixmaps from fvwm, since
+ we don't know where the originals came from.
+
+ * gtk/gtkobject.c (gtk_object_data_destroy): call the destroy
+ notifier with the objects data, not its internal structure.
+
+ * gtk/gtkspinbutton.c (gtk_spin_button_button_press): small
+ fix from lars.
+
Sun Mar 1 15:08:13 CST 1998 Shawn T. Amundson <amundson@gimp.org>
* docs/*.texi changes from Greg Mclean.
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index 55879d6c36..f9c4bb9719 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -1,3 +1,32 @@
+Sun Mar 1 22:59:09 1998 Tim Janik <timj@gimp.org>
+
+ * gtk/gtkstatusbar.h:
+ * gtk/gtkstatusbar.c: complete api change to honour message contexts.
+ unfortunaltely this also involved argument changes on the signal
+ emissions which will not be caught by the compiler. your callbacks
+ should look like:
+ void message_text_popped (GtkStatusbar *statusbar,
+ guint context_id,
+ const gchar *text,
+ gpointer func_data);
+
+ * gtk/gtkwidget.c (gtk_widget_set_rc_style): eliminated bug about
+ initial signal emission.
+ (gtk_widget_set_parent): don't ensure style, just call
+ gtk_widget_set_style_recurse.
+ (gtk_widget_set_style_recurse): only change a widget's rc styles if
+ if there has already been a lookup.
+
+ * gtk/testgtk.c: adaptions for statusbar widget.
+ substituted notebook pixmaps with pixmaps from fvwm, since
+ we don't know where the originals came from.
+
+ * gtk/gtkobject.c (gtk_object_data_destroy): call the destroy
+ notifier with the objects data, not its internal structure.
+
+ * gtk/gtkspinbutton.c (gtk_spin_button_button_press): small
+ fix from lars.
+
Sun Mar 1 15:08:13 CST 1998 Shawn T. Amundson <amundson@gimp.org>
* docs/*.texi changes from Greg Mclean.
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index 55879d6c36..f9c4bb9719 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,3 +1,32 @@
+Sun Mar 1 22:59:09 1998 Tim Janik <timj@gimp.org>
+
+ * gtk/gtkstatusbar.h:
+ * gtk/gtkstatusbar.c: complete api change to honour message contexts.
+ unfortunaltely this also involved argument changes on the signal
+ emissions which will not be caught by the compiler. your callbacks
+ should look like:
+ void message_text_popped (GtkStatusbar *statusbar,
+ guint context_id,
+ const gchar *text,
+ gpointer func_data);
+
+ * gtk/gtkwidget.c (gtk_widget_set_rc_style): eliminated bug about
+ initial signal emission.
+ (gtk_widget_set_parent): don't ensure style, just call
+ gtk_widget_set_style_recurse.
+ (gtk_widget_set_style_recurse): only change a widget's rc styles if
+ if there has already been a lookup.
+
+ * gtk/testgtk.c: adaptions for statusbar widget.
+ substituted notebook pixmaps with pixmaps from fvwm, since
+ we don't know where the originals came from.
+
+ * gtk/gtkobject.c (gtk_object_data_destroy): call the destroy
+ notifier with the objects data, not its internal structure.
+
+ * gtk/gtkspinbutton.c (gtk_spin_button_button_press): small
+ fix from lars.
+
Sun Mar 1 15:08:13 CST 1998 Shawn T. Amundson <amundson@gimp.org>
* docs/*.texi changes from Greg Mclean.
diff --git a/gtk/gtkobject.c b/gtk/gtkobject.c
index 3699f10dc1..d4993f53dc 100644
--- a/gtk/gtkobject.c
+++ b/gtk/gtkobject.c
@@ -1272,7 +1272,7 @@ gtk_object_data_destroy (GtkObjectData *odata)
g_return_if_fail (odata != NULL);
if (odata->destroy)
- odata->destroy (odata);
+ odata->destroy (odata->data);
g_mem_chunk_free (object_data_mem_chunk, odata);
}
diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c
index 552e20ef36..6f8cd8a194 100644
--- a/gtk/gtkspinbutton.c
+++ b/gtk/gtkspinbutton.c
@@ -528,9 +528,6 @@ gtk_spin_button_button_press (GtkWidget *widget,
spin = GTK_SPIN_BUTTON (widget);
- if (event->type != GDK_BUTTON_PRESS)
- return FALSE;
-
if (!spin->button)
{
if (event->window == spin->panel)
diff --git a/gtk/gtkstatusbar.c b/gtk/gtkstatusbar.c
index b0581176fb..69adf1d606 100644
--- a/gtk/gtkstatusbar.c
+++ b/gtk/gtkstatusbar.c
@@ -31,13 +31,16 @@ enum
};
typedef void (*SignalTextP) (GtkObject *object,
+ guint context_id,
const gchar *text,
gpointer func_data);
static void gtk_statusbar_class_init (GtkStatusbarClass *class);
static void gtk_statusbar_init (GtkStatusbar *statusbar);
static void gtk_statusbar_destroy (GtkObject *object);
+static void gtk_statusbar_finalize (GtkObject *object);
static void gtk_statusbar_update (GtkStatusbar *statusbar,
+ guint context_id,
const gchar *text);
static GtkContainerClass *parent_class;
@@ -76,7 +79,8 @@ gtk_statusbar_marshal_text_p (GtkObject *object,
SignalTextP sfunc = (SignalTextP) func;
(* sfunc) (object,
- GTK_VALUE_STRING (args[0]),
+ GTK_VALUE_UINT (args[0]),
+ GTK_VALUE_STRING (args[1]),
func_data);
}
@@ -99,7 +103,8 @@ gtk_statusbar_class_init (GtkStatusbarClass *class)
object_class->type,
GTK_SIGNAL_OFFSET (GtkStatusbarClass, text_pushed),
gtk_statusbar_marshal_text_p,
- GTK_TYPE_NONE, 1,
+ GTK_TYPE_NONE, 2,
+ GTK_TYPE_UINT,
GTK_TYPE_STRING);
statusbar_signals[SIGNAL_TEXT_POPPED] =
gtk_signal_new ("text_popped",
@@ -107,11 +112,13 @@ gtk_statusbar_class_init (GtkStatusbarClass *class)
object_class->type,
GTK_SIGNAL_OFFSET (GtkStatusbarClass, text_popped),
gtk_statusbar_marshal_text_p,
- GTK_TYPE_NONE, 1,
+ GTK_TYPE_NONE, 2,
+ GTK_TYPE_UINT,
GTK_TYPE_STRING);
gtk_object_class_add_signals (object_class, statusbar_signals, SIGNAL_LAST);
object_class->destroy = gtk_statusbar_destroy;
+ object_class->finalize = gtk_statusbar_finalize;
class->messages_mem_chunk = g_mem_chunk_new ("GtkStatusBar messages mem chunk",
sizeof (GtkStatusbarMsg),
@@ -142,8 +149,10 @@ gtk_statusbar_init (GtkStatusbar *statusbar)
gtk_container_add (GTK_CONTAINER (statusbar->frame), statusbar->label);
gtk_widget_show (statusbar->label);
- statusbar->seq_status_id = 1;
+ statusbar->seq_context_id = 1;
+ statusbar->seq_message_id = 1;
statusbar->messages = NULL;
+ statusbar->keys = NULL;
}
GtkWidget*
@@ -154,6 +163,7 @@ gtk_statusbar_new ()
static void
gtk_statusbar_update (GtkStatusbar *statusbar,
+ guint context_id,
const gchar *text)
{
g_return_if_fail (statusbar != NULL);
@@ -166,7 +176,36 @@ gtk_statusbar_update (GtkStatusbar *statusbar,
}
guint
+gtk_statusbar_get_context_id (GtkStatusbar *statusbar,
+ const gchar *context_description)
+{
+ gchar *string;
+ guint *id;
+
+ g_return_val_if_fail (statusbar != NULL, 0);
+ g_return_val_if_fail (GTK_IS_STATUSBAR (statusbar), 0);
+ g_return_val_if_fail (context_description != NULL, 0);
+
+ /* we need to preserve namespaces on object datas */
+ string = g_strconcat ("gtk-status-bar-context:", context_description, NULL);
+
+ id = gtk_object_get_data (GTK_OBJECT (statusbar), string);
+ if (!id)
+ {
+ id = g_new (guint, 1);
+ *id = statusbar->seq_context_id++;
+ gtk_object_set_data_full (GTK_OBJECT (statusbar), string, id, (GtkDestroyNotify) g_free);
+ statusbar->keys = g_slist_prepend (statusbar->keys, string);
+ }
+ else
+ g_free (string);
+
+ return *id;
+}
+
+guint
gtk_statusbar_push (GtkStatusbar *statusbar,
+ guint context_id,
const gchar *text)
{
GtkStatusbarMsg *msg;
@@ -175,65 +214,79 @@ gtk_statusbar_push (GtkStatusbar *statusbar,
g_return_val_if_fail (statusbar != NULL, 0);
g_return_val_if_fail (GTK_IS_STATUSBAR (statusbar), 0);
g_return_val_if_fail (text != NULL, 0);
+ g_return_val_if_fail (context_id > 0, 0);
class = GTK_STATUSBAR_CLASS (GTK_OBJECT (statusbar)->klass);
msg = g_chunk_new (GtkStatusbarMsg, class->messages_mem_chunk);
msg->text = g_strdup (text);
- msg->status_id = statusbar->seq_status_id++;
+ msg->context_id = context_id;
+ msg->message_id = statusbar->seq_message_id++;
- statusbar->messages = g_list_prepend (statusbar->messages, msg);
+ statusbar->messages = g_slist_prepend (statusbar->messages, msg);
- gtk_signal_emit (GTK_OBJECT (statusbar), statusbar_signals[SIGNAL_TEXT_PUSHED], msg->text);
+ gtk_signal_emit (GTK_OBJECT (statusbar),
+ statusbar_signals[SIGNAL_TEXT_PUSHED],
+ msg->context_id,
+ msg->text);
- return msg->status_id;
+ return msg->message_id;
}
void
-gtk_statusbar_pop (GtkStatusbar *statusbar)
+gtk_statusbar_pop (GtkStatusbar *statusbar,
+ guint context_id)
{
GtkStatusbarMsg *msg;
g_return_if_fail (statusbar != NULL);
g_return_if_fail (GTK_IS_STATUSBAR (statusbar));
+ g_return_if_fail (context_id > 0);
if (statusbar->messages)
{
- GList *list;
+ GSList *list;
GtkStatusbarClass *class;
list = statusbar->messages;
msg = list->data;
class = GTK_STATUSBAR_CLASS (GTK_OBJECT (statusbar)->klass);
- statusbar->messages = g_list_remove_link (statusbar->messages, list);
+ statusbar->messages = g_slist_remove_link (statusbar->messages, list);
g_free (msg->text);
g_mem_chunk_free (class->messages_mem_chunk, msg);
- g_list_free_1 (list);
+ g_slist_free_1 (list);
}
msg = statusbar->messages ? statusbar->messages->data : NULL;
- gtk_signal_emit (GTK_OBJECT (statusbar), statusbar_signals[SIGNAL_TEXT_POPPED],
+ gtk_signal_emit (GTK_OBJECT (statusbar),
+ statusbar_signals[SIGNAL_TEXT_POPPED],
+ (guint) (msg ? msg->context_id : 0),
msg ? msg->text : NULL);
}
void
-gtk_statusbar_steal (GtkStatusbar *statusbar,
- guint status_id)
+gtk_statusbar_remove (GtkStatusbar *statusbar,
+ guint context_id,
+ guint message_id)
{
GtkStatusbarMsg *msg;
g_return_if_fail (statusbar != NULL);
g_return_if_fail (GTK_IS_STATUSBAR (statusbar));
+ g_return_if_fail (context_id > 0);
+ g_return_if_fail (message_id > 0);
msg = statusbar->messages ? statusbar->messages->data : NULL;
if (msg)
{
- GList *list;
-
- if (msg->status_id == status_id)
+ GSList *list;
+
+ /* care about signal emission if the topmost item is removed */
+ if (msg->context_id == context_id &&
+ msg->message_id == message_id)
{
- gtk_statusbar_pop (statusbar);
+ gtk_statusbar_pop (statusbar, context_id);
return;
}
@@ -241,15 +294,16 @@ gtk_statusbar_steal (GtkStatusbar *statusbar,
{
msg = list->data;
- if (msg->status_id == status_id)
+ if (msg->context_id == context_id &&
+ msg->message_id == message_id)
{
GtkStatusbarClass *class;
class = GTK_STATUSBAR_CLASS (GTK_OBJECT (statusbar)->klass);
- statusbar->messages = g_list_remove_link (statusbar->messages, list);
+ statusbar->messages = g_slist_remove_link (statusbar->messages, list);
g_free (msg->text);
g_mem_chunk_free (class->messages_mem_chunk, msg);
- g_list_free_1 (list);
+ g_slist_free_1 (list);
break;
}
@@ -262,7 +316,7 @@ gtk_statusbar_destroy (GtkObject *object)
{
GtkStatusbar *statusbar;
GtkStatusbarClass *class;
- GList *list;
+ GSList *list;
g_return_if_fail (object != NULL);
g_return_if_fail (GTK_IS_STATUSBAR (object));
@@ -278,9 +332,28 @@ gtk_statusbar_destroy (GtkObject *object)
g_free (msg->text);
g_mem_chunk_free (class->messages_mem_chunk, msg);
}
- g_list_free (statusbar->messages);
+ g_slist_free (statusbar->messages);
statusbar->messages = NULL;
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
+ GTK_OBJECT_CLASS (parent_class)->destroy (object);
+}
+
+static void
+gtk_statusbar_finalize (GtkObject *object)
+{
+ GtkStatusbar *statusbar;
+ GSList *list;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GTK_IS_STATUSBAR (object));
+
+ statusbar = GTK_STATUSBAR (object);
+
+ for (list = statusbar->keys; list; list = list->next)
+ g_free (list->data);
+ g_slist_free (statusbar->messages);
+ statusbar->keys = NULL;
+ printf("huhu\n");
+
+ GTK_OBJECT_CLASS (parent_class)->finalize (object);
}
diff --git a/gtk/gtkstatusbar.h b/gtk/gtkstatusbar.h
index 498c04abbe..c173fa4551 100644
--- a/gtk/gtkstatusbar.h
+++ b/gtk/gtkstatusbar.h
@@ -41,9 +41,11 @@ struct _GtkStatusbar
GtkWidget *frame;
GtkWidget *label;
- GList *messages;
+ GSList *messages;
+ GSList *keys;
- guint seq_status_id;
+ guint seq_context_id;
+ guint seq_message_id;
};
struct _GtkStatusbarClass
@@ -53,26 +55,33 @@ struct _GtkStatusbarClass
GMemChunk *messages_mem_chunk;
void (*text_pushed) (GtkStatusbar *statusbar,
+ guint context_id,
const gchar *text);
void (*text_popped) (GtkStatusbar *statusbar,
+ guint context_id,
const gchar *text);
};
struct _GtkStatusbarMsg
{
gchar *text;
- guint status_id;
+ guint context_id;
+ guint message_id;
};
guint gtk_statusbar_get_type (void);
GtkWidget* gtk_statusbar_new (void);
-
-/* Returns StatusID used for gtk_statusbar_push */
-guint gtk_statusbar_push (GtkStatusbar *statusbar,
+guint gtk_statusbar_get_context_id (GtkStatusbar *statusbar,
+ const gchar *context_description);
+/* Returns message_id used for gtk_statusbar_remove */
+guint gtk_statusbar_push (GtkStatusbar *statusbar,
+ guint context_id,
const gchar *text);
-void gtk_statusbar_pop (GtkStatusbar *statusbar);
-void gtk_statusbar_steal (GtkStatusbar *statusbar,
- guint status_id);
+void gtk_statusbar_pop (GtkStatusbar *statusbar,
+ guint context_id);
+void gtk_statusbar_remove (GtkStatusbar *statusbar,
+ guint context_id,
+ guint message_id);
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index cfbe30d2f1..d7c57ed8ec 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -125,7 +125,7 @@ typedef void (*GtkWidgetSignal6) (GtkObject *object,
GtkObject *arg1,
gpointer data);
typedef void (*GtkWidgetSignal7) (GtkObject *object,
- gpointer *arg1,
+ gpointer arg1,
gpointer data);
typedef struct _GtkStateData GtkStateData;
@@ -2326,15 +2326,7 @@ gtk_widget_set_parent (GtkWidget *widget,
while (parent->parent != NULL)
parent = parent->parent;
- if (GTK_WIDGET_TOPLEVEL (parent))
- {
- gtk_widget_ensure_style (widget);
-
- if (GTK_IS_CONTAINER (widget))
- gtk_container_foreach (GTK_CONTAINER (widget),
- gtk_widget_set_style_recurse,
- NULL);
- }
+ gtk_widget_set_style_recurse (widget, NULL);
gtk_signal_emit (GTK_OBJECT (widget), widget_signals[PARENT_SET], NULL);
}
@@ -2413,9 +2405,8 @@ gtk_widget_set_rc_style (GtkWidget *widget)
}
else
{
- g_assert (initial_emission == TRUE); /* FIXME: remove this line */
-
- gtk_widget_set_style_internal (widget, widget->style, TRUE);
+ if (initial_emission)
+ gtk_widget_set_style_internal (widget, widget->style, TRUE);
}
}
}
@@ -2508,7 +2499,7 @@ static void
gtk_widget_set_style_recurse (GtkWidget *widget,
gpointer client_data)
{
- if (!GTK_WIDGET_USER_STYLE (widget))
+ if (GTK_WIDGET_RC_STYLE (widget))
gtk_widget_set_rc_style (widget);
if (GTK_IS_CONTAINER (widget))
diff --git a/gtk/testgtk.c b/gtk/testgtk.c
index d263dbf61e..61619b8ff5 100644
--- a/gtk/testgtk.c
+++ b/gtk/testgtk.c
@@ -800,25 +800,26 @@ statusbar_push (GtkWidget *button,
sprintf (text, "something %d", statusbar_counter++);
- gtk_statusbar_push (statusbar, text);
+ gtk_statusbar_push (statusbar, 1, text);
}
static void
statusbar_pop (GtkWidget *button,
GtkStatusbar *statusbar)
{
- gtk_statusbar_pop (statusbar);
+ gtk_statusbar_pop (statusbar, 1);
}
static void
statusbar_steal (GtkWidget *button,
GtkStatusbar *statusbar)
{
- gtk_statusbar_steal (statusbar, 4);
+ gtk_statusbar_remove (statusbar, 1, 4);
}
static void
statusbar_popped (GtkStatusbar *statusbar,
+ guint context_id,
const gchar *text)
{
if (!statusbar->messages)
@@ -826,6 +827,38 @@ statusbar_popped (GtkStatusbar *statusbar,
}
static void
+statusbar_contexts (GtkWidget *button,
+ GtkStatusbar *statusbar)
+{
+ gchar *string;
+
+ string = "any context";
+ g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
+ string,
+ gtk_statusbar_get_context_id (statusbar, string));
+
+ string = "idle messages";
+ g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
+ string,
+ gtk_statusbar_get_context_id (statusbar, string));
+
+ string = "some text";
+ g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
+ string,
+ gtk_statusbar_get_context_id (statusbar, string));
+
+ string = "hit the mouse";
+ g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
+ string,
+ gtk_statusbar_get_context_id (statusbar, string));
+
+ string = "hit the mouse2";
+ g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
+ string,
+ gtk_statusbar_get_context_id (statusbar, string));
+}
+
+static void
statusbar_dump_stack (GtkWidget *button,
GtkStatusbar *statusbar)
{
@@ -836,7 +869,10 @@ statusbar_dump_stack (GtkWidget *button,
GtkStatusbarMsg *msg;
msg = list->data;
- g_print ("status_id: %d, status_text: \"%s\"\n", msg->status_id, msg->text);
+ g_print ("context_id: %d, message_id: %d, status_text: \"%s\"\n",
+ msg->context_id,
+ msg->message_id,
+ msg->text);
}
}
@@ -911,6 +947,13 @@ create_statusbar ()
"GtkObject::signal::clicked", statusbar_dump_stack, statusbar,
NULL);
+ button = gtk_widget_new (gtk_button_get_type (),
+ "GtkButton::label", "test contexts",
+ "GtkWidget::visible", TRUE,
+ "GtkWidget::parent", box2,
+ "GtkObject::signal::clicked", statusbar_contexts, statusbar,
+ NULL);
+
separator = gtk_hseparator_new ();
gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
gtk_widget_show (separator);
@@ -2860,65 +2903,52 @@ GdkBitmap *book_open_mask;
GdkBitmap *book_closed_mask;
static char * book_open_xpm[] = {
-"16 16 11 1",
-" c None",
-". c #28A22CB228A2",
-"X c #FFFFFFFFFFFF",
-"o c #F7DEF7DEF7DE",
-"O c #000000000000",
-"+ c #FFFF6DB60000",
-"@ c #CF3CCF3CCF3C",
-"# c #FFFFDB6C0000",
-"$ c #30C234D330C2",
-"% c #C71BC30BC71B",
-"& c #D75C6DB60000",
+"16 16 4 1",
+" c None s None",
+". c black",
+"X c #808080",
+"o c white",
" ",
" .. ",
-" .X. ",
-" .oO ... ",
-" .+Xo. ..oX.. ",
-" .+oXo..XXoX.@..",
-" .+ooX.@ooXo.@#.",
-" .+XXo.@XooX.@+.",
-" .+XoX.@XoXo.@#.",
-" .+oXo.@oXXX.@+.",
-" .++Xo$@oOO..%#.",
-" ..+&X.@.O@@@@+.",
-" .++........#.",
-" .+..+++++++&$",
-" .+++.......$.",
-" ... "};
+" .Xo. ... ",
+" .Xoo. ..oo. ",
+" .Xooo.Xooo... ",
+" .Xooo.oooo.X. ",
+" .Xooo.Xooo.X. ",
+" .Xooo.oooo.X. ",
+" .Xooo.Xooo.X. ",
+" .Xooo.oooo.X. ",
+" .Xoo.Xoo..X. ",
+" .Xo.o..ooX. ",
+" .X..XXXXX. ",
+" ..X....... ",
+" .. ",
+" "};
static char * book_closed_xpm[] = {
-"16 16 12 1",
-" c None",
-". c #000000000000",
-"X c #FFFF6DB60000",
-"o c #082008200820",
-"O c #AEBA00005144",
-"+ c #FFFFDB6C0000",
-"@ c #AEBA00000000",
-"# c #D75CDB6C0000",
-"$ c #28A22CB228A2",
-"% c #FFFFFFFFFFFF",
-"& c #F7DEF7DEF7DE",
-"* c #30C234D330C2",
+"16 16 6 1",
+" c None s None",
+". c black",
+"X c red",
+"o c yellow",
+"O c #808080",
+"# c white",
" ",
" .. ",
" ..XX. ",
" ..XXXXX. ",
-" o.XXXXXXXX. ",
-".O+XXXXXXXXX. ",
-"o.@#XXXXXXXXX. ",
-".X.O+XXXXXXXXXo ",
-".XX.@+XXXXXXXX.$",
-"oXXX.O+XXXXX..%$",
-" .XXX.@+XX..&&&$",
-" .XXX.O..&%&%.*",
-" .XX$.&&%&.. ",
-" .X$&%&.o ",
-" .$%.. ",
-" .o "};
+" ..XXXXXXXX. ",
+".ooXXXXXXXXX. ",
+"..ooXXXXXXXXX. ",
+".X.ooXXXXXXXXX. ",
+".XX.ooXXXXXX.. ",
+" .XX.ooXXX..#O ",
+" .XX.oo..##OO. ",
+" .XX..##OO.. ",
+" .X.#OO.. ",
+" ..O.. ",
+" .. ",
+" "};
static void
page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
diff --git a/tests/testgtk.c b/tests/testgtk.c
index d263dbf61e..61619b8ff5 100644
--- a/tests/testgtk.c
+++ b/tests/testgtk.c
@@ -800,25 +800,26 @@ statusbar_push (GtkWidget *button,
sprintf (text, "something %d", statusbar_counter++);
- gtk_statusbar_push (statusbar, text);
+ gtk_statusbar_push (statusbar, 1, text);
}
static void
statusbar_pop (GtkWidget *button,
GtkStatusbar *statusbar)
{
- gtk_statusbar_pop (statusbar);
+ gtk_statusbar_pop (statusbar, 1);
}
static void
statusbar_steal (GtkWidget *button,
GtkStatusbar *statusbar)
{
- gtk_statusbar_steal (statusbar, 4);
+ gtk_statusbar_remove (statusbar, 1, 4);
}
static void
statusbar_popped (GtkStatusbar *statusbar,
+ guint context_id,
const gchar *text)
{
if (!statusbar->messages)
@@ -826,6 +827,38 @@ statusbar_popped (GtkStatusbar *statusbar,
}
static void
+statusbar_contexts (GtkWidget *button,
+ GtkStatusbar *statusbar)
+{
+ gchar *string;
+
+ string = "any context";
+ g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
+ string,
+ gtk_statusbar_get_context_id (statusbar, string));
+
+ string = "idle messages";
+ g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
+ string,
+ gtk_statusbar_get_context_id (statusbar, string));
+
+ string = "some text";
+ g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
+ string,
+ gtk_statusbar_get_context_id (statusbar, string));
+
+ string = "hit the mouse";
+ g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
+ string,
+ gtk_statusbar_get_context_id (statusbar, string));
+
+ string = "hit the mouse2";
+ g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
+ string,
+ gtk_statusbar_get_context_id (statusbar, string));
+}
+
+static void
statusbar_dump_stack (GtkWidget *button,
GtkStatusbar *statusbar)
{
@@ -836,7 +869,10 @@ statusbar_dump_stack (GtkWidget *button,
GtkStatusbarMsg *msg;
msg = list->data;
- g_print ("status_id: %d, status_text: \"%s\"\n", msg->status_id, msg->text);
+ g_print ("context_id: %d, message_id: %d, status_text: \"%s\"\n",
+ msg->context_id,
+ msg->message_id,
+ msg->text);
}
}
@@ -911,6 +947,13 @@ create_statusbar ()
"GtkObject::signal::clicked", statusbar_dump_stack, statusbar,
NULL);
+ button = gtk_widget_new (gtk_button_get_type (),
+ "GtkButton::label", "test contexts",
+ "GtkWidget::visible", TRUE,
+ "GtkWidget::parent", box2,
+ "GtkObject::signal::clicked", statusbar_contexts, statusbar,
+ NULL);
+
separator = gtk_hseparator_new ();
gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
gtk_widget_show (separator);
@@ -2860,65 +2903,52 @@ GdkBitmap *book_open_mask;
GdkBitmap *book_closed_mask;
static char * book_open_xpm[] = {
-"16 16 11 1",
-" c None",
-". c #28A22CB228A2",
-"X c #FFFFFFFFFFFF",
-"o c #F7DEF7DEF7DE",
-"O c #000000000000",
-"+ c #FFFF6DB60000",
-"@ c #CF3CCF3CCF3C",
-"# c #FFFFDB6C0000",
-"$ c #30C234D330C2",
-"% c #C71BC30BC71B",
-"& c #D75C6DB60000",
+"16 16 4 1",
+" c None s None",
+". c black",
+"X c #808080",
+"o c white",
" ",
" .. ",
-" .X. ",
-" .oO ... ",
-" .+Xo. ..oX.. ",
-" .+oXo..XXoX.@..",
-" .+ooX.@ooXo.@#.",
-" .+XXo.@XooX.@+.",
-" .+XoX.@XoXo.@#.",
-" .+oXo.@oXXX.@+.",
-" .++Xo$@oOO..%#.",
-" ..+&X.@.O@@@@+.",
-" .++........#.",
-" .+..+++++++&$",
-" .+++.......$.",
-" ... "};
+" .Xo. ... ",
+" .Xoo. ..oo. ",
+" .Xooo.Xooo... ",
+" .Xooo.oooo.X. ",
+" .Xooo.Xooo.X. ",
+" .Xooo.oooo.X. ",
+" .Xooo.Xooo.X. ",
+" .Xooo.oooo.X. ",
+" .Xoo.Xoo..X. ",
+" .Xo.o..ooX. ",
+" .X..XXXXX. ",
+" ..X....... ",
+" .. ",
+" "};
static char * book_closed_xpm[] = {
-"16 16 12 1",
-" c None",
-". c #000000000000",
-"X c #FFFF6DB60000",
-"o c #082008200820",
-"O c #AEBA00005144",
-"+ c #FFFFDB6C0000",
-"@ c #AEBA00000000",
-"# c #D75CDB6C0000",
-"$ c #28A22CB228A2",
-"% c #FFFFFFFFFFFF",
-"& c #F7DEF7DEF7DE",
-"* c #30C234D330C2",
+"16 16 6 1",
+" c None s None",
+". c black",
+"X c red",
+"o c yellow",
+"O c #808080",
+"# c white",
" ",
" .. ",
" ..XX. ",
" ..XXXXX. ",
-" o.XXXXXXXX. ",
-".O+XXXXXXXXX. ",
-"o.@#XXXXXXXXX. ",
-".X.O+XXXXXXXXXo ",
-".XX.@+XXXXXXXX.$",
-"oXXX.O+XXXXX..%$",
-" .XXX.@+XX..&&&$",
-" .XXX.O..&%&%.*",
-" .XX$.&&%&.. ",
-" .X$&%&.o ",
-" .$%.. ",
-" .o "};
+" ..XXXXXXXX. ",
+".ooXXXXXXXXX. ",
+"..ooXXXXXXXXX. ",
+".X.ooXXXXXXXXX. ",
+".XX.ooXXXXXX.. ",
+" .XX.ooXXX..#O ",
+" .XX.oo..##OO. ",
+" .XX..##OO.. ",
+" .X.#OO.. ",
+" ..O.. ",
+" .. ",
+" "};
static void
page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)