diff options
author | Owen Taylor <otaylor@src.gnome.org> | 1997-12-18 02:17:14 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 1997-12-18 02:17:14 +0000 |
commit | d5d01a5af9aaa11762d7ba86760796df00af3786 (patch) | |
tree | c12bb7c7980b3177456cab8987755a976297b205 /gtk/gtkwindow.c | |
parent | 65e63db01e93820093c2eb5169d5f8c0be3fe4e5 (diff) | |
download | gtk+-d5d01a5af9aaa11762d7ba86760796df00af3786.tar.gz |
It's all in the changelog. Well, almost all.
-owt
Diffstat (limited to 'gtk/gtkwindow.c')
-rw-r--r-- | gtk/gtkwindow.c | 108 |
1 files changed, 74 insertions, 34 deletions
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 4fc8dd5e33..f7ed03ed70 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -25,6 +25,7 @@ enum { MOVE_RESIZE, + SET_FOCUS, LAST_SIGNAL }; @@ -35,13 +36,18 @@ typedef gint (*GtkWindowSignal1) (GtkObject *object, gint arg3, gint arg4, gpointer data); - +typedef void (*GtkWindowSignal2) (GtkObject *object, + gpointer arg1, + gpointer data); static void gtk_window_marshal_signal_1 (GtkObject *object, GtkSignalFunc func, gpointer func_data, GtkArg *args); - +static void gtk_window_marshal_signal_2 (GtkObject *object, + GtkSignalFunc func, + gpointer func_data, + GtkArg *args); static void gtk_window_class_init (GtkWindowClass *klass); static void gtk_window_init (GtkWindow *window); static void gtk_window_arg (GtkWindow *window, @@ -80,6 +86,8 @@ static gint gtk_real_window_move_resize (GtkWindow *window, gint *y, gint width, gint height); +static void gtk_real_window_set_focus (GtkWindow *window, + GtkWidget *focus); static gint gtk_window_move_resize (GtkWidget *widget); static void gtk_window_set_hints (GtkWidget *widget, GtkRequisition *requisition); @@ -144,6 +152,15 @@ gtk_window_class_init (GtkWindowClass *klass) GTK_TYPE_POINTER, GTK_TYPE_POINTER, GTK_TYPE_INT, GTK_TYPE_INT); + window_signals[SET_FOCUS] = + gtk_signal_new ("set_focus", + GTK_RUN_LAST, + object_class->type, + GTK_SIGNAL_OFFSET (GtkWindowClass, set_focus), + gtk_window_marshal_signal_2, + GTK_TYPE_NONE, 1, + GTK_TYPE_POINTER); + gtk_object_class_add_signals (object_class, window_signals, LAST_SIGNAL); object_class->destroy = gtk_window_destroy; @@ -168,6 +185,7 @@ gtk_window_class_init (GtkWindowClass *klass) container_class->need_resize = gtk_window_need_resize; klass->move_resize = gtk_real_window_move_resize; + klass->set_focus = gtk_real_window_set_focus; } static void @@ -270,36 +288,7 @@ void gtk_window_set_focus (GtkWindow *window, GtkWidget *focus) { - GdkEventFocus event; - - g_return_if_fail (window != NULL); - g_return_if_fail (GTK_IS_WINDOW (window)); - - if (focus && !GTK_WIDGET_CAN_FOCUS (focus)) - return; - - if (window->focus_widget != focus) - { - if (window->focus_widget) - { - event.type = GDK_FOCUS_CHANGE; - event.window = window->focus_widget->window; - event.in = FALSE; - - gtk_widget_event (window->focus_widget, (GdkEvent*) &event); - } - - window->focus_widget = focus; - - if (window->focus_widget) - { - event.type = GDK_FOCUS_CHANGE; - event.window = window->focus_widget->window; - event.in = TRUE; - - gtk_widget_event (window->focus_widget, (GdkEvent*) &event); - } - } + gtk_signal_emit (GTK_OBJECT (window), window_signals[SET_FOCUS], focus); } void @@ -350,7 +339,8 @@ gtk_window_add_accelerator_table (GtkWindow *window, g_return_if_fail (GTK_IS_WINDOW (window)); gtk_accelerator_table_ref (table); - window->accelerator_tables = g_list_prepend (window->accelerator_tables, table); + window->accelerator_tables = g_list_prepend (window->accelerator_tables, + table); } void @@ -360,7 +350,8 @@ gtk_window_remove_accelerator_table (GtkWindow *window, g_return_if_fail (window != NULL); g_return_if_fail (GTK_IS_WINDOW (window)); - window->accelerator_tables = g_list_remove (window->accelerator_tables, table); + window->accelerator_tables = g_list_remove (window->accelerator_tables, + table); gtk_accelerator_table_unref (table); } @@ -395,6 +386,19 @@ gtk_window_marshal_signal_1 (GtkObject *object, } static void +gtk_window_marshal_signal_2 (GtkObject *object, + GtkSignalFunc func, + gpointer func_data, + GtkArg *args) +{ + GtkWindowSignal2 rfunc; + + rfunc = (GtkWindowSignal2) func; + + (* rfunc) (object, GTK_VALUE_POINTER (args[0]), func_data); +} + +static void gtk_window_destroy (GtkObject *object) { GtkWindow *window; @@ -1128,6 +1132,42 @@ gtk_window_move_resize (GtkWidget *widget) } static void +gtk_real_window_set_focus (GtkWindow *window, + GtkWidget *focus) +{ + GdkEventFocus event; + + g_return_if_fail (window != NULL); + g_return_if_fail (GTK_IS_WINDOW (window)); + + if (focus && !GTK_WIDGET_CAN_FOCUS (focus)) + return; + + if (window->focus_widget != focus) + { + if (window->focus_widget) + { + event.type = GDK_FOCUS_CHANGE; + event.window = window->focus_widget->window; + event.in = FALSE; + + gtk_widget_event (window->focus_widget, (GdkEvent*) &event); + } + + window->focus_widget = focus; + + if (window->focus_widget) + { + event.type = GDK_FOCUS_CHANGE; + event.window = window->focus_widget->window; + event.in = TRUE; + + gtk_widget_event (window->focus_widget, (GdkEvent*) &event); + } + } +} + +static void gtk_window_set_hints (GtkWidget *widget, GtkRequisition *requisition) { |