2
* Common callbacks for spinbuttons
5
* bulia byak <bulia@users.sourceforge.net>
7
* Copyright (C) 2003 authors
9
* Released under GNU GPL, read the file 'COPYING' for more information
17
#include <gdk/gdkkeysyms.h>
19
#include "../event-context.h"
21
#include "sp-widget.h"
22
#include "widget-sizes.h"
26
spinbutton_focus_in (GtkWidget *w, GdkEventKey *event, gpointer data)
30
ini = (gdouble *) gtk_object_get_data (GTK_OBJECT (w), "ini");
31
if (ini) g_free (ini); // free the old value if any
34
ini = g_new (gdouble, 1);
35
*ini = gtk_spin_button_get_value (GTK_SPIN_BUTTON(w));
38
gtk_object_set_data (GTK_OBJECT (w), "ini", ini);
40
return FALSE; // I didn't consume the event
44
spinbutton_undo (GtkWidget *w)
46
gdouble *ini = (gdouble *) gtk_object_get_data (GTK_OBJECT (w), "ini");
47
gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), *ini);
51
spinbutton_defocus (GtkObject *container)
53
// defocus spinbuttons by moving focus to the canvas, unless "stay" is on
54
gboolean stay = GPOINTER_TO_INT(gtk_object_get_data (GTK_OBJECT (container), "stay"));
56
gtk_object_set_data (GTK_OBJECT (container), "stay", GINT_TO_POINTER (FALSE));
58
GtkWidget *canvas = (GtkWidget *) gtk_object_get_data (GTK_OBJECT (container), "dtw");
60
gtk_widget_grab_focus (GTK_WIDGET(canvas));
66
spinbutton_keypress (GtkWidget *w, GdkEventKey *event, gpointer data)
68
SPWidget *spw = (SPWidget *) data;
71
switch (get_group0_keyval (event)) {
72
case GDK_Escape: // defocus
74
spinbutton_defocus (GTK_OBJECT (spw));
75
return TRUE; // I consumed the event
77
case GDK_Return: // defocus
79
spinbutton_defocus (GTK_OBJECT (spw));
80
return TRUE; // I consumed the event
83
case GDK_ISO_Left_Tab:
84
// set the flag meaning "do not leave toolbar when changing value"
85
gtk_object_set_data (GTK_OBJECT (spw), "stay", GINT_TO_POINTER(TRUE));
86
return FALSE; // I didn't consume the event
89
// The following keys are processed manually because GTK implements them in strange ways
90
// (increments start with double step value and seem to grow as you press the key continuously)
94
gtk_object_set_data (GTK_OBJECT (spw), "stay", GINT_TO_POINTER(TRUE));
95
v = gtk_spin_button_get_value(GTK_SPIN_BUTTON (w));
97
gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), v);
98
return TRUE; // I consumed the event
102
gtk_object_set_data (GTK_OBJECT (spw), "stay", GINT_TO_POINTER(TRUE));
103
v = gtk_spin_button_get_value(GTK_SPIN_BUTTON (w));
105
gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), v);
106
return TRUE; // I consumed the event
110
gtk_object_set_data (GTK_OBJECT (spw), "stay", GINT_TO_POINTER(TRUE));
111
v = gtk_spin_button_get_value(GTK_SPIN_BUTTON (w));
113
gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), v);
114
return TRUE; // I consumed the event
117
case GDK_KP_Page_Down:
118
gtk_object_set_data (GTK_OBJECT (spw), "stay", GINT_TO_POINTER(TRUE));
119
v = gtk_spin_button_get_value(GTK_SPIN_BUTTON (w));
121
gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), v);
122
return TRUE; // I consumed the event
126
gtk_object_set_data (GTK_OBJECT (spw), "stay", GINT_TO_POINTER(TRUE));
127
if (event->state & GDK_CONTROL_MASK) {
129
return TRUE; // I consumed the event
136
return FALSE; // I didn't consume the event