merged testgtkrc with the pre-themes one, removed system specific

Mon Nov 30 10:11:29 1998  Tim Janik  <timj@gtk.org>

        * gtk/testgtkrc: merged testgtkrc with the pre-themes one, removed
        system specific includes.

        * gtk/gtksignal.c: asured that stop and restart emissions are also
        checked and processed for not connected objects. fixed up restart
        emission administration. invoke emission hooks after emission, hooks
        are not supposed to muck around with the current emission, and
        may also not cause emission restarts. fixed up stop emission
        administration.
This commit is contained in:
Tim Janik 1998-11-30 10:38:29 +00:00 committed by Tim Janik
parent 2c0fc39e62
commit 0c36e30836
10 changed files with 363 additions and 76 deletions

View File

@ -1,3 +1,15 @@
Mon Nov 30 10:11:29 1998 Tim Janik <timj@gtk.org>
* gtk/testgtkrc: merged testgtkrc with the pre-themes one, removed
system specific includes.
* gtk/gtksignal.c: asured that stop and restart emissions are also
checked and processed for not connected objects. fixed up restart
emission administration. invoke emission hooks after emission, hooks
are not supposed to muck around with the current emission, and
may also not cause emission restarts. fixed up stop emission
administration.
Mon Nov 30 06:20:36 1998 Tim Janik <timj@gtk.org>
* gtk/testgtk.c: added an event watcher for enter/leave based on

View File

@ -1,3 +1,15 @@
Mon Nov 30 10:11:29 1998 Tim Janik <timj@gtk.org>
* gtk/testgtkrc: merged testgtkrc with the pre-themes one, removed
system specific includes.
* gtk/gtksignal.c: asured that stop and restart emissions are also
checked and processed for not connected objects. fixed up restart
emission administration. invoke emission hooks after emission, hooks
are not supposed to muck around with the current emission, and
may also not cause emission restarts. fixed up stop emission
administration.
Mon Nov 30 06:20:36 1998 Tim Janik <timj@gtk.org>
* gtk/testgtk.c: added an event watcher for enter/leave based on

View File

@ -1,3 +1,15 @@
Mon Nov 30 10:11:29 1998 Tim Janik <timj@gtk.org>
* gtk/testgtkrc: merged testgtkrc with the pre-themes one, removed
system specific includes.
* gtk/gtksignal.c: asured that stop and restart emissions are also
checked and processed for not connected objects. fixed up restart
emission administration. invoke emission hooks after emission, hooks
are not supposed to muck around with the current emission, and
may also not cause emission restarts. fixed up stop emission
administration.
Mon Nov 30 06:20:36 1998 Tim Janik <timj@gtk.org>
* gtk/testgtk.c: added an event watcher for enter/leave based on

View File

@ -1,3 +1,15 @@
Mon Nov 30 10:11:29 1998 Tim Janik <timj@gtk.org>
* gtk/testgtkrc: merged testgtkrc with the pre-themes one, removed
system specific includes.
* gtk/gtksignal.c: asured that stop and restart emissions are also
checked and processed for not connected objects. fixed up restart
emission administration. invoke emission hooks after emission, hooks
are not supposed to muck around with the current emission, and
may also not cause emission restarts. fixed up stop emission
administration.
Mon Nov 30 06:20:36 1998 Tim Janik <timj@gtk.org>
* gtk/testgtk.c: added an event watcher for enter/leave based on

View File

@ -1,3 +1,15 @@
Mon Nov 30 10:11:29 1998 Tim Janik <timj@gtk.org>
* gtk/testgtkrc: merged testgtkrc with the pre-themes one, removed
system specific includes.
* gtk/gtksignal.c: asured that stop and restart emissions are also
checked and processed for not connected objects. fixed up restart
emission administration. invoke emission hooks after emission, hooks
are not supposed to muck around with the current emission, and
may also not cause emission restarts. fixed up stop emission
administration.
Mon Nov 30 06:20:36 1998 Tim Janik <timj@gtk.org>
* gtk/testgtk.c: added an event watcher for enter/leave based on

View File

@ -1,3 +1,15 @@
Mon Nov 30 10:11:29 1998 Tim Janik <timj@gtk.org>
* gtk/testgtkrc: merged testgtkrc with the pre-themes one, removed
system specific includes.
* gtk/gtksignal.c: asured that stop and restart emissions are also
checked and processed for not connected objects. fixed up restart
emission administration. invoke emission hooks after emission, hooks
are not supposed to muck around with the current emission, and
may also not cause emission restarts. fixed up stop emission
administration.
Mon Nov 30 06:20:36 1998 Tim Janik <timj@gtk.org>
* gtk/testgtk.c: added an event watcher for enter/leave based on

View File

@ -1,3 +1,15 @@
Mon Nov 30 10:11:29 1998 Tim Janik <timj@gtk.org>
* gtk/testgtkrc: merged testgtkrc with the pre-themes one, removed
system specific includes.
* gtk/gtksignal.c: asured that stop and restart emissions are also
checked and processed for not connected objects. fixed up restart
emission administration. invoke emission hooks after emission, hooks
are not supposed to muck around with the current emission, and
may also not cause emission restarts. fixed up stop emission
administration.
Mon Nov 30 06:20:36 1998 Tim Janik <timj@gtk.org>
* gtk/testgtk.c: added an event watcher for enter/leave based on

View File

@ -592,7 +592,10 @@ gtk_signal_emit_stop (GtkObject *object,
g_return_if_fail (signal_id >= 1);
if (gtk_emission_check (current_emissions, object, signal_id))
gtk_emission_add (&stop_emissions, object, signal_id);
{
if (!gtk_emission_check (stop_emissions, object, signal_id))
gtk_emission_add (&stop_emissions, object, signal_id);
}
else
g_warning ("gtk_signal_emit_stop(): no current emission (%u) for object `%s'",
signal_id,
@ -1339,47 +1342,69 @@ gtk_signal_real_emit (GtkObject *object,
guint signal_id,
GtkArg *params)
{
static guint emission_hooks_called = 0;
GtkSignal signal;
GtkHandler *handlers;
GtkSignalFunc *signal_func_offset;
GtkSignalFunc signal_func;
if (emission_hooks_called)
{
g_warning ("gtk_signal_real_emit() may not recurse from emission hooks");
return;
}
/* gtk_handlers_run() expects a reentrant GtkSignal*, so we allocate
* it locally on the stack. we save some lookups ourselves with this as well.
*/
signal = *LOOKUP_SIGNAL_ID (signal_id);
if (signal.function_offset)
{
signal_func_offset = (GtkSignalFunc*) ((guchar*) object->klass + signal.function_offset);
if (!*signal_func_offset)
signal_func_offset = (GtkSignalFunc*) 0;
}
signal_func = G_STRUCT_MEMBER (GtkSignalFunc, object->klass, signal.function_offset);
else
signal_func_offset = NULL;
signal_func = NULL;
#ifdef G_ENABLE_DEBUG
if (gtk_debug_flags & GTK_DEBUG_SIGNALS ||
object == gtk_trace_signal_object)
fprintf (stdout, "GTK-DEBUG: signal_emit (\"%s\") for %s:%p (class-pointer %p)\n",
signal.name,
gtk_type_name (GTK_OBJECT_TYPE (object)),
object,
signal_func_offset);
g_message ("%s::%s emitted (object=%p class-method=%p)\n",
gtk_type_name (GTK_OBJECT_TYPE (object)),
signal.name,
object,
signal_func);
#endif /* G_ENABLE_DEBUG */
if ((signal.signal_flags & GTK_RUN_NO_RECURSE) &&
if (signal.signal_flags & GTK_RUN_NO_RECURSE &&
gtk_emission_check (current_emissions, object, signal_id))
{
gtk_emission_add (&restart_emissions, object, signal_id);
if (!gtk_emission_check (restart_emissions, object, signal_id))
gtk_emission_add (&restart_emissions, object, signal_id);
return;
}
gtk_object_ref (object);
gtk_emission_add (&current_emissions, object, signal_id);
emission_restart:
if (GTK_RUN_TYPE (signal.signal_flags) != GTK_RUN_LAST && signal_func_offset)
signal.marshaller (object, *signal_func_offset, NULL, params);
if (signal.signal_flags & GTK_RUN_FIRST && signal_func)
{
signal.marshaller (object, signal_func, NULL, params);
if (stop_emissions && gtk_emission_check (stop_emissions, object, signal_id))
{
gtk_emission_remove (&stop_emissions, object, signal_id);
goto emission_done;
}
else if (restart_emissions &&
signal.signal_flags & GTK_RUN_NO_RECURSE &&
gtk_emission_check (restart_emissions, object, signal_id))
{
gtk_emission_remove (&restart_emissions, object, signal_id);
goto emission_restart;
}
}
if (GTK_OBJECT_CONNECTED (object))
{
@ -1387,22 +1412,38 @@ gtk_signal_real_emit (GtkObject *object,
if (handlers)
{
gint return_val;
return_val = gtk_handlers_run (handlers, &signal, object, params, FALSE);
switch (return_val)
{
case EMISSION_CONTINUE:
case EMISSION_CONTINUE:
break;
case EMISSION_RESTART:
case EMISSION_RESTART:
goto emission_restart;
case EMISSION_DONE:
case EMISSION_DONE:
goto emission_done;
}
}
}
if (GTK_RUN_TYPE (signal.signal_flags) != GTK_RUN_FIRST && signal_func_offset)
signal.marshaller (object, *signal_func_offset, NULL, params);
if (signal.signal_flags & GTK_RUN_LAST && signal_func)
{
signal.marshaller (object, signal_func, NULL, params);
if (stop_emissions && gtk_emission_check (stop_emissions, object, signal_id))
{
gtk_emission_remove (&stop_emissions, object, signal_id);
goto emission_done;
}
else if (restart_emissions &&
signal.signal_flags & GTK_RUN_NO_RECURSE &&
gtk_emission_check (restart_emissions, object, signal_id))
{
gtk_emission_remove (&restart_emissions, object, signal_id);
goto emission_restart;
}
}
if (GTK_OBJECT_CONNECTED (object))
{
@ -1410,7 +1451,7 @@ gtk_signal_real_emit (GtkObject *object,
if (handlers)
{
gint return_val;
return_val = gtk_handlers_run (handlers, &signal, object, params, TRUE);
switch (return_val)
{
@ -1423,24 +1464,26 @@ gtk_signal_real_emit (GtkObject *object,
}
}
}
/* do *not* reorder this call! */
if (signal.hook_list)
emission_done:
if (restart_emissions && signal.signal_flags & GTK_RUN_NO_RECURSE)
gtk_emission_remove (&restart_emissions, object, signal_id);
gtk_emission_remove (&current_emissions, object, signal_id);
/* the hook invokation portion may not be moved!
*/
if (signal.hook_list && !GTK_OBJECT_DESTROYED (object))
{
gpointer data[2];
data[0] = &signal;
data[1] = object;
emission_hooks_called++;
g_hook_list_marshal_check (signal.hook_list, TRUE, gtk_emission_hook_marshaller, &data);
emission_hooks_called--;
}
emission_done:
gtk_emission_remove (&current_emissions, object, signal_id);
if (signal.signal_flags & GTK_RUN_NO_RECURSE)
gtk_emission_remove (&restart_emissions, object, signal_id);
gtk_object_unref (object);
}
@ -1593,12 +1636,6 @@ gtk_signal_remove_emission_hook (guint signal_id,
if (!signal->hook_list || !g_hook_destroy (signal->hook_list, hook_id))
g_warning ("gtk_signal_remove_emission_hook(): could not find hook (%u)", hook_id);
if (signal->hook_list && !signal->hook_list->hooks)
{
g_hook_list_clear (signal->hook_list);
g_free (signal->hook_list);
signal->hook_list = NULL;
}
}
static gboolean
@ -1612,7 +1649,10 @@ gtk_emission_hook_marshaller (GHook *hook,
signal = data[0];
func = hook->func;
return func (data[1], signal->signal_id, hook->data);
if (!GTK_OBJECT_DESTROYED (data[1]))
return func (data[1], signal->signal_id, hook->data);
else
return TRUE;
}
static guint
@ -1804,7 +1844,7 @@ gtk_handlers_run (GtkHandler *handlers,
gtk_signal_handler_ref (handlers);
if (handlers->blocked == 0 && (handlers->after == after))
if (!handlers->blocked && handlers->after == after)
{
if (handlers->func)
{
@ -1814,7 +1854,7 @@ gtk_handlers_run (GtkHandler *handlers,
signal->nparams,
params);
else if (handlers->object_signal)
/* don't GTK_OBJECT(handlers->func_data) cast */
/* don't cast with GTK_OBJECT () */
(* signal->marshaller) ((GtkObject*) handlers->func_data,
handlers->func,
handlers->func_data,
@ -1833,25 +1873,24 @@ gtk_handlers_run (GtkHandler *handlers,
signal->params,
signal->return_val);
if (gtk_emission_check (stop_emissions, object,
signal->signal_id))
if (stop_emissions && gtk_emission_check (stop_emissions,
object,
signal->signal_id))
{
gtk_emission_remove (&stop_emissions, object,
signal->signal_id);
gtk_emission_remove (&stop_emissions, object, signal->signal_id);
if (signal->signal_flags & GTK_RUN_NO_RECURSE)
gtk_emission_remove (&restart_emissions, object,
signal->signal_id);
gtk_signal_handler_unref (handlers, object);
return EMISSION_DONE;
}
else if ((signal->signal_flags & GTK_RUN_NO_RECURSE) &&
gtk_emission_check (restart_emissions, object,
signal->signal_id))
else if (restart_emissions &&
signal->signal_flags & GTK_RUN_NO_RECURSE &&
gtk_emission_check (restart_emissions, object, signal->signal_id))
{
gtk_emission_remove (&restart_emissions, object,
signal->signal_id);
gtk_emission_remove (&restart_emissions, object, signal->signal_id);
gtk_signal_handler_unref (handlers, object);
return EMISSION_RESTART;
}
}

View File

@ -10,28 +10,110 @@
# widget <widget_set> style <style_name>
# widget_class <widget_class_set> style <style_name>
#include "/opt/themes/share/themes/W/gtk/gtkrc"
#include "/home/otaylor/.themes/Ignorant/gtk/gtkrc"
# testgtkrc2 sets all the buttons in the main window to blue by default
include "testgtkrc2"
style "defaultfont" {
font = "-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*,*"
pixmap_path "."
style "defaultfont"
{
# fontset = "-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*,*"
font = "-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*,*"
}
# common default
class "GtkWidget" style "defaultfont"
style "window"
{
# bg_pixmap[NORMAL] = "warning.xpm"
}
style "scale"
{
fg[NORMAL] = { 1.0, 0, 0 }
bg_pixmap[NORMAL] = "<parent>"
}
style "button" = "default"
{
# fg[PRELIGHT] = { 1.0, 1.0, 1.0 }
# bg[PRELIGHT] = { 0, 0, 0.75 }
# bg[PRELIGHT] = { 0.75, 0, 0x00 }
}
style "toggle_button" = "button"
{
fg[NORMAL] = { 1.0, 0, 0 }
fg[ACTIVE] = { 1.0, 0, 0 }
bg_pixmap[NORMAL] = "<parent>"
}
style "text"
{
bg_pixmap[NORMAL] = "marble.xpm"
text[NORMAL] = { 1.0, 1.0, 1.0 }
fg[NORMAL] = { 1.0, 1.0, 1.0 }
base[NORMAL] = { 0.0, 0.0, 0.0 }
}
style "slider"
{
fg[NORMAL] = { 1.0, 1.0, 1.0 }
bg[NORMAL] = { 0.0, 0.0, 1.0 }
bg[ACTIVE] = { 0.0 ,0.0, 0.5 }
bg[PRELIGHT] = { 0.75 ,0.75, 1.0 }
}
style "ruler"
{
font = '-adobe-helvetica-medium-r-normal--*-80-*-*-*-*-*-*'
}
style "curve"
{
fg[NORMAL] = { 58000, 0, 0 } # red
}
style "red-bar"
{
bg[PRELIGHT] = { 0.95, .55, 0.55 }
}
# override testgtk2, introduce the green color in the button list
style 'button_list' = 'button'
{
font = "-adobe-helvetica-medium-r-normal--*-100-*-*-*-*-*-*"
bg[PRELIGHT] = { 0, 0.75, 0x00 }
}
widget "main window.*GtkScrolledWindow.*GtkButton*" style "button_list"
class "GtkScrollbar" style "red-bar"
widget_class "GtkWindow" style "window"
widget_class "GtkDialog" style "window"
widget_class "GtkFileSelection" style "window"
widget_class "*Gtk*Scale" style "scale"
widget_class "*GtkCheckButton*" style "toggle_button"
widget_class "*GtkRadioButton*" style "toggle_button"
widget_class "*GtkButton*" style "button"
widget_class "*Ruler" style "ruler"
widget_class "*GtkText" style "text"
widget "*GtkCurve" style "curve"
binding "test1"
{
bind "<ctrl>1" {
"debug-msg" ("hallo and")
"debug-msg" ("huhu")
"debug-msg" ("jup!")
}
}
binding "test2"
{
bind "<ctrl>1" {
"debug-msg" ("jup!")
"debug-msg" ("hallo and")
"debug-msg" ("huhu")
}
}
@ -39,10 +121,10 @@ binding "test2"
# lowest
# gtk (used by gtk for internal class bindings)
# application (for hard coded bindings on application basis)
# rc (used implicitly by rc files)
# rc (used implicitel by rc files)
# highest
class "GtkButton" binding "test1" # implicit : rc
class "GtkButton" binding : highest "test2" # override "rc" priority
class "GtkWindow" binding "test1" # implicit : rc
class "GtkWindow" binding : highest "test2" # override "rc" priority
binding "clist-test"
{

View File

@ -10,28 +10,110 @@
# widget <widget_set> style <style_name>
# widget_class <widget_class_set> style <style_name>
#include "/opt/themes/share/themes/W/gtk/gtkrc"
#include "/home/otaylor/.themes/Ignorant/gtk/gtkrc"
# testgtkrc2 sets all the buttons in the main window to blue by default
include "testgtkrc2"
style "defaultfont" {
font = "-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*,*"
pixmap_path "."
style "defaultfont"
{
# fontset = "-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*,*"
font = "-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*,*"
}
# common default
class "GtkWidget" style "defaultfont"
style "window"
{
# bg_pixmap[NORMAL] = "warning.xpm"
}
style "scale"
{
fg[NORMAL] = { 1.0, 0, 0 }
bg_pixmap[NORMAL] = "<parent>"
}
style "button" = "default"
{
# fg[PRELIGHT] = { 1.0, 1.0, 1.0 }
# bg[PRELIGHT] = { 0, 0, 0.75 }
# bg[PRELIGHT] = { 0.75, 0, 0x00 }
}
style "toggle_button" = "button"
{
fg[NORMAL] = { 1.0, 0, 0 }
fg[ACTIVE] = { 1.0, 0, 0 }
bg_pixmap[NORMAL] = "<parent>"
}
style "text"
{
bg_pixmap[NORMAL] = "marble.xpm"
text[NORMAL] = { 1.0, 1.0, 1.0 }
fg[NORMAL] = { 1.0, 1.0, 1.0 }
base[NORMAL] = { 0.0, 0.0, 0.0 }
}
style "slider"
{
fg[NORMAL] = { 1.0, 1.0, 1.0 }
bg[NORMAL] = { 0.0, 0.0, 1.0 }
bg[ACTIVE] = { 0.0 ,0.0, 0.5 }
bg[PRELIGHT] = { 0.75 ,0.75, 1.0 }
}
style "ruler"
{
font = '-adobe-helvetica-medium-r-normal--*-80-*-*-*-*-*-*'
}
style "curve"
{
fg[NORMAL] = { 58000, 0, 0 } # red
}
style "red-bar"
{
bg[PRELIGHT] = { 0.95, .55, 0.55 }
}
# override testgtk2, introduce the green color in the button list
style 'button_list' = 'button'
{
font = "-adobe-helvetica-medium-r-normal--*-100-*-*-*-*-*-*"
bg[PRELIGHT] = { 0, 0.75, 0x00 }
}
widget "main window.*GtkScrolledWindow.*GtkButton*" style "button_list"
class "GtkScrollbar" style "red-bar"
widget_class "GtkWindow" style "window"
widget_class "GtkDialog" style "window"
widget_class "GtkFileSelection" style "window"
widget_class "*Gtk*Scale" style "scale"
widget_class "*GtkCheckButton*" style "toggle_button"
widget_class "*GtkRadioButton*" style "toggle_button"
widget_class "*GtkButton*" style "button"
widget_class "*Ruler" style "ruler"
widget_class "*GtkText" style "text"
widget "*GtkCurve" style "curve"
binding "test1"
{
bind "<ctrl>1" {
"debug-msg" ("hallo and")
"debug-msg" ("huhu")
"debug-msg" ("jup!")
}
}
binding "test2"
{
bind "<ctrl>1" {
"debug-msg" ("jup!")
"debug-msg" ("hallo and")
"debug-msg" ("huhu")
}
}
@ -39,10 +121,10 @@ binding "test2"
# lowest
# gtk (used by gtk for internal class bindings)
# application (for hard coded bindings on application basis)
# rc (used implicitly by rc files)
# rc (used implicitel by rc files)
# highest
class "GtkButton" binding "test1" # implicit : rc
class "GtkButton" binding : highest "test2" # override "rc" priority
class "GtkWindow" binding "test1" # implicit : rc
class "GtkWindow" binding : highest "test2" # override "rc" priority
binding "clist-test"
{