1997-11-24 22:37:52 +00:00
|
|
|
/* GTK - The GIMP Toolkit
|
|
|
|
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
2000-07-26 11:33:08 +00:00
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
1997-11-24 22:37:52 +00:00
|
|
|
* 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
|
1998-03-09 15:16:28 +00:00
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
2000-07-26 11:33:08 +00:00
|
|
|
* Lesser General Public License for more details.
|
1997-11-24 22:37:52 +00:00
|
|
|
*
|
2000-07-26 11:33:08 +00:00
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
1998-04-13 02:02:47 +00:00
|
|
|
* License along with this library; if not, write to the
|
|
|
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
|
|
* Boston, MA 02111-1307, USA.
|
1997-11-24 22:37:52 +00:00
|
|
|
*/
|
1999-02-24 07:37:18 +00:00
|
|
|
|
|
|
|
/*
|
2000-07-26 11:33:08 +00:00
|
|
|
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
1999-02-24 07:37:18 +00:00
|
|
|
* 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/.
|
|
|
|
*/
|
|
|
|
|
1997-11-24 22:37:52 +00:00
|
|
|
#ifndef __GTK_SIGNAL_H__
|
|
|
|
#define __GTK_SIGNAL_H__
|
|
|
|
|
|
|
|
|
|
|
|
#include <gdk/gdk.h>
|
|
|
|
#include <gtk/gtkenums.h>
|
|
|
|
#include <gtk/gtkobject.h>
|
1998-07-21 05:01:37 +00:00
|
|
|
#include <gtk/gtkmarshal.h>
|
1997-11-24 22:37:52 +00:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif /* __cplusplus */
|
|
|
|
|
1998-03-09 15:16:28 +00:00
|
|
|
|
deleted most of the argument handling code, since that is now implemented
Fri Jul 10 00:02:04 1998 Tim Janik <timj@gtk.org>
* gtk/gtkcontainer.h:
* gtk/gtkcontainer.c: deleted most of the argument handling code, since
that is now implemented in gtkarg.c. similar to gtk_object_args_collect,
we now export a new function gtk_container_child_args_collect().
for consistency with the object arguments, a few functions got renamed:
gtk_container_child_arg_get -> gtk_container_child_get,
gtk_container_child_arg_set -> gtk_container_child_set,
gtk_container_child_arg_getv -> gtk_container_child_getv,
gtk_container_child_arg_setv -> gtk_container_child_setv,
gtk_container_add_with_argv -> gtk_container_addv.
note, gtk_container_add_with_args() remained, because its equivalent
would be gtk_container_add(,, ...) which would break all existing code.
(gtk_container_add_child_arg_type): similar to gtk_object_add_arg_type,
we expect the `arg_name' argument to be a const static string now.
(gtk_container_get_child_arg_type): function removed.
Thu Jul 9 07:03:04 1998 Tim Janik <timj@gtk.org>
* gtk/gtkargcollector.c: new file which holds gtk_arg_collect_value().
this is a static inline function that collects command line arguments
from a va_list. this file can just be included in all places that
need this functionality.
* gtk/gtkarg.h:
* gtk/gtkarg.c: new files which implement most of the argument
handling stuff from gtkobject.c. also collected a few more
gtk_arg_* utility functions from else places.
* gtk/gtkobject.h:
* gtk/gtkobject.c: moved most of the argument handling code into
gtkarg.c. we now export gtk_object_args_collect() as a non-public
method with a blind va_list pointer.
(gtk_object_add_arg_type): the `arg_name' argument is required to be a
const static string now.
(gtk_object_get_arg_type): function got removed.
* gtk/gtkwidget.c:
(gtk_widget_set):
(gtk_widget_new): adaptions for gtk_object_args_collect().
* gtk/gtktypeutils.c (gtk_type_init_builtin_types): changed the internal
fundamental type name so as to have a valid prefix, e.g. "bool"->
"gboolean", "string"->"GtkString" and somesuch, left "void" as is,
though that should probably be something like GtkNone since the
type itself is called GTK_TYPE_NONE.
even the internal type names need to avoid name clashes and must live
in their own namespace, several code portions rely on that.
we should relly have typedefs such as typedef gchar* GtkString; so the
fundamental type names can be used for code dumpers just like with all
the Gtk/Gdk types.
1998-07-09 23:00:34 +00:00
|
|
|
#define GTK_SIGNAL_OFFSET(struct, field) (GTK_STRUCT_OFFSET (struct, field))
|
1998-01-29 20:44:14 +00:00
|
|
|
|
1998-03-09 15:16:28 +00:00
|
|
|
|
1998-11-30 07:09:36 +00:00
|
|
|
typedef void (*GtkSignalMarshal) (GtkObject *object,
|
1998-03-09 15:16:28 +00:00
|
|
|
gpointer data,
|
|
|
|
guint nparams,
|
|
|
|
GtkArg *args,
|
|
|
|
GtkType *arg_types,
|
|
|
|
GtkType return_type);
|
1998-11-30 07:09:36 +00:00
|
|
|
typedef void (*GtkSignalDestroy) (gpointer data);
|
|
|
|
typedef gboolean (*GtkEmissionHook) (GtkObject *object,
|
|
|
|
guint signal_id,
|
reverted marius change to expose the type systems internal type info data
Mon Dec 7 03:08:39 1998 Tim Janik <timj@gtk.org>
* gtk/gtktypeutils.h:
* gtk/gtktypeutils.c: reverted marius change to expose the type systems
internal type info data to the user. if such functionality is required
we should provide wrapped accessors, ala gtk_signal_query().
* gtk/gtksignal.c (gtk_signal_connect_by_type): reverted marius change,
since it destroys the possibility to implement automatic marshaller
lookups some day, and it also disables third party code's ability to
connect to any signal. also the GtkTypeInfo structures are dynamically
allocated memory portions, so only the type system is really allowed
to access that stuff.
Mon Dec 7 01:32:18 1998 Tim Janik <timj@gtk.org>
* gtk/gtkfilesel.c (gtk_file_selection_key_press): always intercept the
Tab key on the entry. the focus shouldn't get lost even if completion
is attempted from an empty entry, since an empty entry string does
indeed have a valid completion meaning (complete all).
(gtk_file_selection_init): cast the gchar array parameter in calls to
gtk_clist_new_with_titles() to quit compiler warnings.
(check_dir): the no_stat_dirs struct must not be const, since we do
indeed modify its contents.
* gtk/testgtk.c (event_watcher): adapted prototype to fit new emission
hook semantics.
* gtk/gtksignal.h:
* gtk/gtksignal.c:
changed emission allocation, so we don't use a doubly linked list
but link ourselfs (singly linked).
changed emission hooks, they get the emision parameters passed as
well now and are emitted during the actuall signal emission (after
the RUN_FIRST class method, but prior to RUN_FIRST handlers).
the existing restrictions do still apply to signal emission hooks,
i.e. an emission may not be stopped or restarted from an emission hook.
due to possibly huge perfomance impacts, frequent use of emision hooks
is also not recommended.
(gtk_signal_next_and_invalidate): added an
assertments which explicits what the code assumes anyways: a
maximum amount of 65535 signals.
* gtk/gtkcontainer.h: deprecated gtk_container_foreach_interp(),
gtk_container_foreach_full() should be used instead.
* gtk/gtkmain.h:
deprecated gtk_timeout_add_interp and gtk_idle_add_interp, since
we provide _full variants.
* gtk/gtksignal.h: deprecated gtk_signal_connect_interp(), we provide
gtk_signal_connect_full() for long enough now.
1998-12-07 02:31:19 +00:00
|
|
|
guint n_params,
|
|
|
|
GtkArg *params,
|
1998-11-30 07:09:36 +00:00
|
|
|
gpointer data);
|
|
|
|
|
1998-01-29 20:44:14 +00:00
|
|
|
typedef struct _GtkSignalQuery GtkSignalQuery;
|
|
|
|
|
|
|
|
struct _GtkSignalQuery
|
|
|
|
{
|
1998-03-09 15:16:28 +00:00
|
|
|
GtkType object_type;
|
|
|
|
guint signal_id;
|
1998-01-29 20:44:14 +00:00
|
|
|
const gchar *signal_name;
|
1998-05-06 01:43:56 +00:00
|
|
|
guint is_user_signal : 1;
|
1998-06-09 07:11:55 +00:00
|
|
|
GtkSignalRunType signal_flags;
|
1998-01-29 20:44:14 +00:00
|
|
|
GtkType return_val;
|
|
|
|
guint nparams;
|
|
|
|
const GtkType *params;
|
|
|
|
};
|
1997-11-24 22:37:52 +00:00
|
|
|
|
1999-02-19 18:07:29 +00:00
|
|
|
|
|
|
|
/* Application-level methods */
|
1998-03-09 15:16:28 +00:00
|
|
|
guint gtk_signal_lookup (const gchar *name,
|
|
|
|
GtkType object_type);
|
|
|
|
gchar* gtk_signal_name (guint signal_id);
|
1998-05-03 19:13:24 +00:00
|
|
|
guint gtk_signal_n_emissions (GtkObject *object,
|
|
|
|
guint signal_id);
|
|
|
|
guint gtk_signal_n_emissions_by_name (GtkObject *object,
|
|
|
|
const gchar *name);
|
1998-03-09 15:16:28 +00:00
|
|
|
void gtk_signal_emit_stop (GtkObject *object,
|
|
|
|
guint signal_id);
|
|
|
|
void gtk_signal_emit_stop_by_name (GtkObject *object,
|
|
|
|
const gchar *name);
|
|
|
|
guint gtk_signal_connect (GtkObject *object,
|
|
|
|
const gchar *name,
|
|
|
|
GtkSignalFunc func,
|
|
|
|
gpointer func_data);
|
|
|
|
guint gtk_signal_connect_after (GtkObject *object,
|
|
|
|
const gchar *name,
|
|
|
|
GtkSignalFunc func,
|
|
|
|
gpointer func_data);
|
|
|
|
guint gtk_signal_connect_object (GtkObject *object,
|
|
|
|
const gchar *name,
|
|
|
|
GtkSignalFunc func,
|
|
|
|
GtkObject *slot_object);
|
|
|
|
guint gtk_signal_connect_object_after (GtkObject *object,
|
|
|
|
const gchar *name,
|
|
|
|
GtkSignalFunc func,
|
|
|
|
GtkObject *slot_object);
|
|
|
|
guint gtk_signal_connect_full (GtkObject *object,
|
|
|
|
const gchar *name,
|
|
|
|
GtkSignalFunc func,
|
|
|
|
GtkCallbackMarshal marshal,
|
|
|
|
gpointer data,
|
|
|
|
GtkDestroyNotify destroy_func,
|
|
|
|
gint object_signal,
|
|
|
|
gint after);
|
|
|
|
|
|
|
|
void gtk_signal_connect_object_while_alive (GtkObject *object,
|
GTK_RESIZE_NEEDED is a private flag now.
Mon Feb 2 04:15:08 1998 Tim Janik <timj@gimp.org>
* gtk/gtkcontainer.h:
* gtk/gtkcontainer.c: GTK_RESIZE_NEEDED is a private flag now.
(gtk_container_register_toplevel): new function.
(gtk_container_unregister_toplevel): new function.
* gtk/gtkmain.c: GTK_LEAVE_PENDING is a private flag now.
* gtk/gtkmenu.c: call gtk_container_register_toplevel in
gtk_menu_class_init instead of this dirty gtk_widget_set_parent(,NULL)
hack. new default handler gtk_menu_destroy for calling
gtk_container_unregister_toplevel. removed GTK_ANCHORED, GTK_UNMAPPED.
* gtk/gtkobject.h: macro cleanups, added GTK_DESTROYED flag.
* gtk/gtkobject.c: only emit DESTROY signal if !GTK_OBJECT_DESTROYED
(object).
* gtk/gtkprivate.h: new file that will not be automatically included.
it holds the private flags for GtkWidget along with it's SET/UNSET
and examination macros.
* gtk/gtkwidget.c: private flags: GTK_RESIZE_NEEDED, GTK_REDRAW_PENDING,
GTK_RESIZE_PENDING, GTK_IN_REPARENT, GTK_USER_STYLE. GTK_ANCHORED is
replaced by GTK_TOPLEVEL. added missing UNSET for GTK_IN_REPARENT.
removed the gtk_widget_set_parent(, NULL) hack for toplevels.
upon destroy free memory for widgets with GTK_WIDGET_HAS_SHAPE_MASK.
* gtk/gtkwidget.h: split up the widget flags into a public and a private
portion. added an extra field private_flags to GtkWidget without making
it bigger by using an alignment gap of 16 bit. macro cleanups.
* gtk/gtkwindow.c: removed GTK_ANCHORED. new function gtk_window_destroy
for calling gtk_container_unregister_toplevel. removed the
gtk_widget_set_parent(,NULL), call gtk_container_register_toplevel
instead. remove GTK_UNMAPPED. GTK_RESIZE_NEEDED is private now.
* gtk/gtksignal.c (gtk_signal_disconnect): removed a bug on
removal that cut off the handler list -> living_objects == 0
with testgtk. made some warnings more descriptive.
new function gtk_signal_connect_object_while_alive, which
will automatically destroy the connection once one of the objects
is destroyed. didn't include this before removal of the above
mentioned bug.
* reflected refcounting revolution in ChangeLog
1998-02-02 04:54:25 +00:00
|
|
|
const gchar *signal,
|
1998-03-09 15:16:28 +00:00
|
|
|
GtkSignalFunc func,
|
|
|
|
GtkObject *alive_object);
|
|
|
|
void gtk_signal_connect_while_alive (GtkObject *object,
|
1998-02-03 21:36:06 +00:00
|
|
|
const gchar *signal,
|
1998-03-09 15:16:28 +00:00
|
|
|
GtkSignalFunc func,
|
|
|
|
gpointer func_data,
|
|
|
|
GtkObject *alive_object);
|
|
|
|
|
|
|
|
void gtk_signal_disconnect (GtkObject *object,
|
|
|
|
guint handler_id);
|
1998-05-02 20:48:49 +00:00
|
|
|
void gtk_signal_disconnect_by_func (GtkObject *object,
|
|
|
|
GtkSignalFunc func,
|
|
|
|
gpointer data);
|
1998-03-09 15:16:28 +00:00
|
|
|
void gtk_signal_disconnect_by_data (GtkObject *object,
|
|
|
|
gpointer data);
|
|
|
|
void gtk_signal_handler_block (GtkObject *object,
|
|
|
|
guint handler_id);
|
1998-05-02 20:48:49 +00:00
|
|
|
void gtk_signal_handler_block_by_func (GtkObject *object,
|
|
|
|
GtkSignalFunc func,
|
|
|
|
gpointer data);
|
1998-03-09 15:16:28 +00:00
|
|
|
void gtk_signal_handler_block_by_data (GtkObject *object,
|
|
|
|
gpointer data);
|
|
|
|
void gtk_signal_handler_unblock (GtkObject *object,
|
|
|
|
guint handler_id);
|
1998-05-02 20:48:49 +00:00
|
|
|
void gtk_signal_handler_unblock_by_func (GtkObject *object,
|
|
|
|
GtkSignalFunc func,
|
|
|
|
gpointer data);
|
1998-03-09 15:16:28 +00:00
|
|
|
void gtk_signal_handler_unblock_by_data (GtkObject *object,
|
|
|
|
gpointer data);
|
1998-02-10 23:49:15 +00:00
|
|
|
guint gtk_signal_handler_pending (GtkObject *object,
|
1998-03-09 15:16:28 +00:00
|
|
|
guint signal_id,
|
1998-02-10 23:49:15 +00:00
|
|
|
gboolean may_be_blocked);
|
1998-06-18 03:22:09 +00:00
|
|
|
guint gtk_signal_handler_pending_by_func (GtkObject *object,
|
|
|
|
guint signal_id,
|
|
|
|
gboolean may_be_blocked,
|
|
|
|
GtkSignalFunc func,
|
|
|
|
gpointer data);
|
1999-02-24 23:34:14 +00:00
|
|
|
gint gtk_signal_handler_pending_by_id (GtkObject *object,
|
|
|
|
guint handler_id,
|
|
|
|
gboolean may_be_blocked);
|
1998-11-30 07:09:36 +00:00
|
|
|
guint gtk_signal_add_emission_hook (guint signal_id,
|
|
|
|
GtkEmissionHook hook_func,
|
|
|
|
gpointer data);
|
|
|
|
guint gtk_signal_add_emission_hook_full (guint signal_id,
|
|
|
|
GtkEmissionHook hook_func,
|
|
|
|
gpointer data,
|
|
|
|
GDestroyNotify destroy);
|
|
|
|
void gtk_signal_remove_emission_hook (guint signal_id,
|
|
|
|
guint hook_id);
|
|
|
|
|
1998-06-19 01:26:24 +00:00
|
|
|
/* Report internal information about a signal. The caller has the
|
1998-12-08 23:57:25 +00:00
|
|
|
* responsibility to invoke a subsequent g_free (returned_data); but
|
|
|
|
* must not modify data pointed to by the members of GtkSignalQuery
|
1998-01-29 20:44:14 +00:00
|
|
|
*/
|
1998-03-09 15:16:28 +00:00
|
|
|
GtkSignalQuery* gtk_signal_query (guint signal_id);
|
1998-01-29 20:44:14 +00:00
|
|
|
|
1997-11-24 22:37:52 +00:00
|
|
|
|
1999-02-19 18:07:29 +00:00
|
|
|
/* Widget-level methods */
|
|
|
|
void gtk_signal_init (void);
|
|
|
|
guint gtk_signal_new (const gchar *name,
|
|
|
|
GtkSignalRunType signal_flags,
|
|
|
|
GtkType object_type,
|
|
|
|
guint function_offset,
|
|
|
|
GtkSignalMarshaller marshaller,
|
|
|
|
GtkType return_val,
|
|
|
|
guint nparams,
|
|
|
|
...);
|
|
|
|
guint gtk_signal_newv (const gchar *name,
|
|
|
|
GtkSignalRunType signal_flags,
|
|
|
|
GtkType object_type,
|
|
|
|
guint function_offset,
|
|
|
|
GtkSignalMarshaller marshaller,
|
|
|
|
GtkType return_val,
|
|
|
|
guint nparams,
|
|
|
|
GtkType *params);
|
|
|
|
void gtk_signal_emit (GtkObject *object,
|
|
|
|
guint signal_id,
|
|
|
|
...);
|
|
|
|
void gtk_signal_emit_by_name (GtkObject *object,
|
|
|
|
const gchar *name,
|
|
|
|
...);
|
|
|
|
void gtk_signal_emitv (GtkObject *object,
|
|
|
|
guint signal_id,
|
|
|
|
GtkArg *params);
|
|
|
|
void gtk_signal_emitv_by_name (GtkObject *object,
|
|
|
|
const gchar *name,
|
|
|
|
GtkArg *params);
|
|
|
|
/* Non-public methods */
|
|
|
|
void gtk_signal_handlers_destroy (GtkObject *object);
|
|
|
|
void gtk_signal_set_funcs (GtkSignalMarshal marshal_func,
|
|
|
|
GtkSignalDestroy destroy_func);
|
1999-02-24 23:34:14 +00:00
|
|
|
|
1999-02-19 18:07:29 +00:00
|
|
|
|
|
|
|
|
1997-11-24 22:37:52 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif /* __cplusplus */
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* __GTK_SIGNAL_H__ */
|