Esempio n. 1
0
gboolean on_entry_key_press_event(GtkEntry *entry, GdkEvent *event)
{
	guint k = GDK_KEY_VoidSymbol;
	gdk_event_get_keyval(event, &k);

	GdkModifierType s;
	gdk_event_get_state(event, &s);

#define KEY(S) (k == S)
#define CTRL(S) (KEY(S) && s & GDK_CONTROL_MASK)
#define SHIFT(S) (KEY(S) && s & GDK_SHIFT_MASK)

	if (KEY(GDK_KEY_Escape) || CTRL(GDK_KEY_c))
		gtk_main_quit();
	else if (KEY(GDK_KEY_Tab) || CTRL(GDK_KEY_i))
		gtk_entry_set_text(entry, row_text(selected_row()));
	else if (KEY(GDK_KEY_Down) || CTRL(GDK_KEY_f))
		select_row(selected_row() + 1);
	else if (KEY(GDK_KEY_Up) || CTRL(GDK_KEY_b))
		select_row(selected_row() - 1);
	else if (KEY(GDK_KEY_Return) || CTRL(GDK_KEY_j))
		output(row_text(selected_row()));
	else if (SHIFT(GDK_KEY_Return) || CTRL(GDK_KEY_J))
		output(entry_text());

	return FALSE;
}
Esempio n. 2
0
static gboolean
is_keynav_event (GdkEvent *event, guint keyval)
{
	GdkModifierType state = 0;

	gdk_event_get_state (event, &state);

	if (keyval == GDK_KEY_Tab ||
	    keyval == GDK_KEY_KP_Tab ||
	    keyval == GDK_KEY_Up ||
	    keyval == GDK_KEY_KP_Up ||
	    keyval == GDK_KEY_Down ||
	    keyval == GDK_KEY_KP_Down ||
	    keyval == GDK_KEY_Left ||
	    keyval == GDK_KEY_KP_Left ||
	    keyval == GDK_KEY_Right ||
	    keyval == GDK_KEY_KP_Right ||
	    keyval == GDK_KEY_Home ||
	    keyval == GDK_KEY_KP_Home ||
	    keyval == GDK_KEY_End ||
	    keyval == GDK_KEY_KP_End ||
	    keyval == GDK_KEY_Page_Up ||
	    keyval == GDK_KEY_KP_Page_Up ||
	    keyval == GDK_KEY_Page_Down ||
	    keyval == GDK_KEY_KP_Page_Down ||
	    ((state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)) != 0))
		return TRUE;

	return FALSE;
}
Esempio n. 3
0
static gboolean
is_keynav_event (GdkEvent *event,
                 guint     keyval)
{
    GdkModifierType state = 0;

    gdk_event_get_state (event, &state);

    if (keyval == GDK_KEY_Tab ||
            keyval == GDK_KEY_KP_Tab ||
            keyval == GDK_KEY_Up ||
            keyval == GDK_KEY_KP_Up ||
            keyval == GDK_KEY_Down ||
            keyval == GDK_KEY_KP_Down ||
            keyval == GDK_KEY_Left ||
            keyval == GDK_KEY_KP_Left ||
            keyval == GDK_KEY_Right ||
            keyval == GDK_KEY_KP_Right ||
            keyval == GDK_KEY_Home ||
            keyval == GDK_KEY_KP_Home ||
            keyval == GDK_KEY_End ||
            keyval == GDK_KEY_KP_End ||
            keyval == GDK_KEY_Page_Up ||
            keyval == GDK_KEY_KP_Page_Up ||
            keyval == GDK_KEY_Page_Down ||
            keyval == GDK_KEY_KP_Page_Down ||
            ((state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)) != 0))
        return TRUE;

    /* Other navigation events should get automatically
     * ignored as they will not change the content of the entry
     */

    return FALSE;
}
Esempio n. 4
0
GdkModifierType
ada_gdk_event_get_state (GdkEvent * event)
{
  GdkModifierType state;
  if (!gdk_event_get_state(event, &state)) {
    return ada_gdk_invalid_guint_value;
  }
  return state;
}
Esempio n. 5
0
gboolean
gimp_device_info_get_event_state (GimpDeviceInfo  *info,
                                  GdkWindow       *window,
                                  const GdkEvent  *event,
                                  GdkModifierType *state)
{
  if (gdk_event_get_state (event, state))
    return TRUE;

  gimp_device_info_get_device_state (info, window, state);

  return FALSE;
}
Esempio n. 6
0
static inline WebEvent::Modifiers modifiersForEvent(const GdkEvent* event)
{
    unsigned modifiers = 0;
    GdkModifierType state;

    // Check for a valid state in GdkEvent.
    if (!gdk_event_get_state(event, &state))
        return static_cast<WebEvent::Modifiers>(0);

    if (state & GDK_CONTROL_MASK)
        modifiers |= WebEvent::ControlKey;
    if (state & GDK_SHIFT_MASK)
        modifiers |= WebEvent::ShiftKey;
    if (state & GDK_MOD1_MASK)
        modifiers |= WebEvent::AltKey;
    if (state & GDK_META_MASK)
        modifiers |= WebEvent::MetaKey;

    return static_cast<WebEvent::Modifiers>(modifiers);
}
static void
move_item_cb (GtkAction          *action,
              EggEditableToolbar *etoolbar)
{
  GtkWidget *toolitem = gtk_widget_get_ancestor (egg_editable_toolbar_get_selected (etoolbar), GTK_TYPE_TOOL_ITEM);
  GtkTargetList *list = gtk_target_list_new (dest_drag_types, G_N_ELEMENTS (dest_drag_types));

  GdkEvent *realevent = gtk_get_current_event();
  GdkEventMotion event;
  event.type = GDK_MOTION_NOTIFY;
  event.window = realevent->any.window;
  event.send_event = FALSE;
  event.axes = NULL;
  event.time = gdk_event_get_time (realevent);
  gdk_event_get_state (realevent, &event.state);
  gdk_event_get_coords (realevent, &event.x, &event.y);
  gdk_event_get_root_coords (realevent, &event.x_root, &event.y_root);

  gtk_drag_begin (toolitem, list, GDK_ACTION_MOVE, 1, (GdkEvent *)&event);
  gtk_target_list_unref (list);
}
Esempio n. 8
0
static gboolean key_press_event (GtkWidget   *widget,
                                 GdkEventKey *event,
                                 gpointer     user_data)
{
    char **input_buffer = (char **)user_data;
    GdkModifierType state = 0;

    gdk_event_get_state((GdkEvent*)event, &state);

    if (*input_buffer && event->type == GDK_KEY_PRESS) {
        switch (state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) {
            case 0:
            case GDK_SHIFT_MASK:
                return plain_key_pressed(input_buffer, event->keyval);
            case GDK_CONTROL_MASK:
                return ctrl_plus_key_pressed(input_buffer, event->keyval, widget);
            default:
                return FALSE;
        }
    }
    return FALSE;
}
Esempio n. 9
0
static inline WebMouseEvent::Button buttonForEvent(const GdkEvent* event)
{
    unsigned button = 0;

    switch (event->type) {
    case GDK_ENTER_NOTIFY:
    case GDK_LEAVE_NOTIFY:
    case GDK_MOTION_NOTIFY: {
        button = WebMouseEvent::NoButton;
        GdkModifierType state;
        gdk_event_get_state(event, &state);
        if (state & GDK_BUTTON1_MASK)
            button = WebMouseEvent::LeftButton;
        else if (state & GDK_BUTTON2_MASK)
            button = WebMouseEvent::MiddleButton;
        else if (state & GDK_BUTTON3_MASK)
            button = WebMouseEvent::RightButton;
        break;
    }
    case GDK_BUTTON_PRESS:
    case GDK_2BUTTON_PRESS:
    case GDK_3BUTTON_PRESS:
    case GDK_BUTTON_RELEASE:
        if (event->button.button == 1)
            button = WebMouseEvent::LeftButton;
        else if (event->button.button == 2)
            button = WebMouseEvent::MiddleButton;
        else if (event->button.button == 3)
            button = WebMouseEvent::RightButton;
        break;
    default:
        ASSERT_NOT_REACHED();
    }

    return static_cast<WebMouseEvent::Button>(button);
}
Esempio n. 10
0
/* i just cut n pasted the old handler in here and made minor changes..
 * not done yet.  so the real keyboard input handler will just pass
 * it off to this.  i think.*/
void terminal_process_input_key(GdkEventKey * event)
{
    GdkModifierType modifiers;
    gboolean modifier = FALSE;



    if (event->type == GDK_KEY_PRESS)
    {
        /* Read the modifiers */
        if (gdk_event_get_state((GdkEvent *)event,
                                &modifiers) == FALSE)
        {
            modifiers = 0;
        }

        g_debug("Modifier state = %x", event->state);

        switch (event->keyval)
        {   /*
        case GDK_Alt_L:
        case GDK_Alt_R:
        case GDK_Caps_Lock:
        case GDK_Control_L:
        case GDK_Control_R:
        case GDK_Eisu_Shift:
        case GDK_Hyper_L:
        case GDK_Hyper_R:
        case GDK_ISO_First_Group_Lock:
        case GDK_ISO_Group_Lock:
        case GDK_ISO_Group_Shift:
        case GDK_ISO_Last_Group_Lock:
        case GDK_ISO_Level3_Lock:
        case GDK_ISO_Level3_Shift:
        case GDK_ISO_Lock:
        case GDK_ISO_Next_Group_Lock:
        case GDK_ISO_Prev_Group_Lock:
        case GDK_Kana_Lock:
        case GDK_Kana_Shift:
        case GDK_Meta_L:
        case GDK_Meta_R:
        case GDK_Num_Lock:
        case GDK_Scroll_Lock:
        case GDK_Shift_L:
        case GDK_Shift_Lock:
        case GDK_Shift_R:
        case GDK_Super_L:
        case GDK_Super_R:
        	modifier = TRUE;
        	g_debug("Modifier press, keyval=%d", event->keyval);
        	break;
        */
        case GDK_Up:
            terminal_stuff_key_input("\033[A", 3);
            break;
        case GDK_Down:
            terminal_stuff_key_input("\033[B", 3);
            break;
        case GDK_Left:
            terminal_stuff_key_input("\033[D", 3);
            break;
        case GDK_Right:
            terminal_stuff_key_input("\033[C", 3);
            break;
        case GDK_Return:
            /* Assume binary mode - send CR */
            terminal_stuff_key_input("\r", 1);
            break;
        case GDK_BackSpace:
            terminal_stuff_key_input("\010", 1);
            break;
        case GDK_Delete:
            terminal_stuff_key_input("\x7f", 1);
            break;
        case GDK_Home:
            terminal_stuff_key_input("\033[H", 3);
            break;
        case GDK_End:
            terminal_stuff_key_input("\033[K", 3);
            break;
        case GDK_Insert:
            terminal_stuff_key_input("\026", 1);
            break;
        default:
            modifier = FALSE;
            g_debug("Key press: (keyval=%d): %s",
                    event->keyval, event->string);

            /* CTRL key pressed? */
            /*if (event->state & GDK_CONTROL_MASK)
            	terminal_process_control_key(event->keyval);
            else*/
            terminal_stuff_key_input(event->string,
                                     event->length);
            break;
        }

        //return TRUE;
    }
    //return FALSE;
}
Esempio n. 11
0
/* Links can also be activated by clicking. */
static gboolean
textview_event_after (GtkTextView *textview,
                      GdkEvent *event)
{
	GtkTextIter start, end, iter;
	GtkTextBuffer *buffer;
	gint x, y;
	GdkModifierType mt = 0;
	guint event_button = 0;
	gdouble event_x_win = 0;
	gdouble event_y_win = 0;

	g_return_val_if_fail (GTK_IS_TEXT_VIEW (textview), FALSE);

	if (event->type == GDK_KEY_PRESS || event->type == GDK_KEY_RELEASE) {
		guint event_keyval = 0;

		gdk_event_get_keyval (event, &event_keyval);

		switch (event_keyval) {
			case GDK_KEY_Control_L:
			case GDK_KEY_Control_R:
				update_ctrl_state (
					textview,
					event->type == GDK_KEY_PRESS);
				break;
		}

		return FALSE;
	}

	if (!gdk_event_get_state (event, &mt)) {
		GdkWindow *window;
		GdkDisplay *display;
		GdkDeviceManager *device_manager;
		GdkDevice *device;

		window = gtk_widget_get_parent_window (GTK_WIDGET (textview));
		display = gdk_window_get_display (window);
		device_manager = gdk_display_get_device_manager (display);
		device = gdk_device_manager_get_client_pointer (device_manager);

		gdk_window_get_device_position (window, device, NULL, NULL, &mt);
	}

	update_ctrl_state (textview, (mt & GDK_CONTROL_MASK) != 0);

	if (event->type != GDK_BUTTON_RELEASE)
		return FALSE;

	gdk_event_get_button (event, &event_button);
	gdk_event_get_coords (event, &event_x_win, &event_y_win);

	if (event_button != 1 || (mt & GDK_CONTROL_MASK) == 0)
		return FALSE;

	buffer = gtk_text_view_get_buffer (textview);

	/* we shouldn't follow a link if the user has selected something */
	gtk_text_buffer_get_selection_bounds (buffer, &start, &end);
	if (gtk_text_iter_get_offset (&start) != gtk_text_iter_get_offset (&end))
		return FALSE;

	gtk_text_view_window_to_buffer_coords (
		textview,
		GTK_TEXT_WINDOW_WIDGET,
		event_x_win, event_y_win, &x, &y);

	gtk_text_view_get_iter_at_location (textview, &iter, x, y);

	invoke_link_if_present (buffer, &iter);
	update_mouse_cursor (textview, x, y);

	return FALSE;
}