Beispiel #1
0
static void
gr_edit (GtkWidget */*button*/, GtkWidget *widget)
{
    GtkWidget *om = (GtkWidget *) g_object_get_data (G_OBJECT(widget), "menu");

    spinbutton_defocus(GTK_OBJECT(widget));

    if (om) {
        GtkWidget *i = gtk_menu_get_active (GTK_MENU (gtk_option_menu_get_menu (GTK_OPTION_MENU (om))));
        SPGradient *gr = (SPGradient *) g_object_get_data (G_OBJECT(i), "gradient");

        if (gr) {
            GtkWidget *dialog = sp_gradient_vector_editor_new (gr);
            gtk_widget_show (dialog);
        }
    }
}
Beispiel #2
0
gboolean
spinbutton_keypress (GtkWidget *w, GdkEventKey *event, gpointer data)
{
    SPWidget *spw = (SPWidget *) data;
    gdouble v;
    gdouble step;
    gdouble page;

	switch (get_group0_keyval (event)) {
	case GDK_KEY_Escape: // defocus
		spinbutton_undo (w);
		spinbutton_defocus(GTK_WIDGET(spw));
		return TRUE; // I consumed the event
		break;
	case GDK_KEY_Return: // defocus
	case GDK_KEY_KP_Enter:
		spinbutton_defocus (GTK_WIDGET(spw));
		return TRUE; // I consumed the event
		break;
	case GDK_KEY_Tab:
	case GDK_KEY_ISO_Left_Tab:
		// set the flag meaning "do not leave toolbar when changing value"
		g_object_set_data (G_OBJECT (spw), "stay", GINT_TO_POINTER(TRUE));
		return FALSE; // I didn't consume the event
		break;

	// The following keys are processed manually because GTK implements them in strange ways
	// (increments start with double step value and seem to grow as you press the key continuously)

	case GDK_KEY_Up:
	case GDK_KEY_KP_Up:
		g_object_set_data (G_OBJECT (spw), "stay", GINT_TO_POINTER(TRUE));
		v = gtk_spin_button_get_value(GTK_SPIN_BUTTON (w));
	    gtk_spin_button_get_increments(GTK_SPIN_BUTTON (w), &step, &page);
		v += step;
		gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), v);
		return TRUE; // I consumed the event
		break;
	case GDK_KEY_Down:
	case GDK_KEY_KP_Down:
		g_object_set_data (G_OBJECT (spw), "stay", GINT_TO_POINTER(TRUE));
		v = gtk_spin_button_get_value(GTK_SPIN_BUTTON (w));
	    gtk_spin_button_get_increments(GTK_SPIN_BUTTON (w), &step, &page);
		v -= step;
		gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), v);
		return TRUE; // I consumed the event
		break;
	case GDK_KEY_Page_Up:
	case GDK_KEY_KP_Page_Up:
		g_object_set_data (G_OBJECT (spw), "stay", GINT_TO_POINTER(TRUE));
		v = gtk_spin_button_get_value(GTK_SPIN_BUTTON (w));
	    gtk_spin_button_get_increments(GTK_SPIN_BUTTON (w), &step, &page);
		v += page;
		gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), v);
		return TRUE; // I consumed the event
		break;
	case GDK_KEY_Page_Down:
	case GDK_KEY_KP_Page_Down:
		g_object_set_data (G_OBJECT (spw), "stay", GINT_TO_POINTER(TRUE));
		v = gtk_spin_button_get_value(GTK_SPIN_BUTTON (w));
	    gtk_spin_button_get_increments(GTK_SPIN_BUTTON (w), &step, &page);
		v -= page;
		gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), v);
		return TRUE; // I consumed the event
		break;
	case GDK_KEY_z:
	case GDK_KEY_Z:
		g_object_set_data (G_OBJECT (spw), "stay", GINT_TO_POINTER(TRUE));
		if (event->state & GDK_CONTROL_MASK) {
			spinbutton_undo (w);
			return TRUE; // I consumed the event
		}
		break;
	default:
		return FALSE;
		break;
	}
	return FALSE; // I didn't consume the event
}