示例#1
0
文件: screenshot.c 项目: lnieto-m/RT
static gboolean	inputs(GtkWidget *widget, GdkEventKey *event,
	gpointer data)
{
	t_env *rt;

	rt = (t_env *)data;
	if (!ft_strcmp(gdk_keyval_name(event->keyval), "Return"))
		save_file(widget, rt);
	else if (!ft_strcmp(gdk_keyval_name(event->keyval), "Escape"))
		exit(0);
	return (0);
}
/* static */ void
KeymapWrapper::InitKeyEvent(nsKeyEvent& aKeyEvent,
                            GdkEventKey* aGdkKeyEvent)
{
    KeymapWrapper* keymapWrapper = GetInstance();

    aKeyEvent.keyCode = ComputeDOMKeyCode(aGdkKeyEvent);

    // NOTE: The state of given key event indicates adjacent state of
    // modifier keys.  E.g., even if the event is Shift key press event,
    // the bit for Shift is still false.  By the same token, even if the
    // event is Shift key release event, the bit for Shift is still true.
    // Unfortunately, gdk_keyboard_get_modifiers() returns current modifier
    // state.  It means if there're some pending modifier key press or
    // key release events, the result isn't what we want.
    // Temporarily, we should compute the state only when the key event
    // is GDK_KEY_PRESS.
    // XXX If we could know the modifier keys state at the key release event,
    //     we should cut out changingMask from modifierState.
    guint modifierState = aGdkKeyEvent->state;
    if (aGdkKeyEvent->is_modifier && aGdkKeyEvent->type == GDK_KEY_PRESS) {
        ModifierKey* modifierKey =
            keymapWrapper->GetModifierKey(aGdkKeyEvent->hardware_keycode);
        if (modifierKey) {
            // If new modifier key is pressed, add the pressed mod mask.
            modifierState |= modifierKey->mMask;
        }
    }
    InitInputEvent(aKeyEvent, modifierState);

    PR_LOG(gKeymapWrapperLog, PR_LOG_ALWAYS,
        ("KeymapWrapper(%p): InitKeyEvent, modifierState=0x%08X "
         "aGdkKeyEvent={ type=%s, keyval=%s(0x%X), state=0x%08X, "
         "hardware_keycode=0x%08X, is_modifier=%s } "
         "aKeyEvent={ message=%s, isShift=%s, isControl=%s, "
         "isAlt=%s, isMeta=%s }",
         keymapWrapper, modifierState,
         ((aGdkKeyEvent->type == GDK_KEY_PRESS) ?
               "GDK_KEY_PRESS" : "GDK_KEY_RELEASE"),
         gdk_keyval_name(aGdkKeyEvent->keyval),
         aGdkKeyEvent->keyval, aGdkKeyEvent->state,
         aGdkKeyEvent->hardware_keycode,
         GetBoolName(aGdkKeyEvent->is_modifier),
         ((aKeyEvent.message == NS_KEY_DOWN) ? "NS_KEY_DOWN" :
               (aKeyEvent.message == NS_KEY_PRESS) ? "NS_KEY_PRESS" :
                                                      "NS_KEY_UP"),
         GetBoolName(aKeyEvent.isShift), GetBoolName(aKeyEvent.isControl),
         GetBoolName(aKeyEvent.isAlt), GetBoolName(aKeyEvent.isMeta)));

    if (aKeyEvent.message == NS_KEY_PRESS) {
        keymapWrapper->InitKeypressEvent(aKeyEvent, aGdkKeyEvent);
    }

    // The transformations above and in gdk for the keyval are not invertible
    // so link to the GdkEvent (which will vanish soon after return from the
    // event callback) to give plugins access to hardware_keycode and state.
    // (An XEvent would be nice but the GdkEvent is good enough.)
    aKeyEvent.pluginEvent = (void *)aGdkKeyEvent;
    aKeyEvent.time = aGdkKeyEvent->time;
}
示例#3
0
static gboolean key(GtkWidget *widget, GdkEventKey *event, gpointer data) {
    M6502 *mpu = (M6502 *) data;
    Strudel* mb = (Strudel *) mpu->ext;
    guint32 u = 0;
    gchar *s = NULL;

    s = gdk_keyval_name(event->keyval);
    u = gdk_keyval_to_unicode(event->keyval);

    g_print("Key press event: %s (%d)\n", s, u);

    if (u == 0) {
        if (strcmp(s, "BackSpace") == 0)
            u = 0x8;
        else if (strcmp(s, "Return") == 0)
            u = '\r';
    } else if (event->state & GDK_CONTROL_MASK) {
        u %= 32;
    }

    if (u > 0 && u < 128) {
        if (u == 3) {
           g_print("Interrupt\n");
           M6502_do(mpu, M6502_IRQ);
        } else if (mb->keyr - mb->keyw != 1) {
           mb->key[mb->keyw++] = u % 128;
        }
    }


    return TRUE;
}
示例#4
0
      void visit(const char* name, Accelerator& accelerator)
      {
        m_file << name << "=";

        const char* key = global_keys_find(accelerator.key);
        if(!string_empty(key))
        {
          m_file << key;
        }
        else if(accelerator.key != 0)
        {
          m_file << gdk_keyval_name(accelerator.key);
        }

        if(accelerator.modifiers & GDK_MOD1_MASK)
        {
          m_file << "+Alt";
        }
        if(accelerator.modifiers & GDK_CONTROL_MASK)
        {
          m_file << "+Ctrl";
        }
        if(accelerator.modifiers & GDK_SHIFT_MASK)
        {
          m_file << "+Shift";
        }

        m_file << "\n";
      }
示例#5
0
void cell_renderer_key_set_scancode (CellRendererKey *key, gint scancode)
{
  gboolean changed;

  g_return_if_fail (IS_CELL_RENDERER_KEY(key));

  g_object_freeze_notify(G_OBJECT(key));

  changed = FALSE;
  
  if (scancode != key->scancode) {
    key->scancode = scancode;
    g_object_notify(G_OBJECT(key), "scancode");
    changed = TRUE;
  }

  g_object_thaw_notify(G_OBJECT(key));

  if (changed) {
      const gchar *text;
      /* sync string to the key values */
      if (scancode <= 0) {
      	text = "None";
      } else {
        guint keyval = 0;

        gdk_keymap_translate_keyboard_state(gdk_keymap_get_default(),
      	  scancode, 0, 0, &keyval, NULL, NULL, NULL);
        text = gdk_keyval_name(keyval);
      }
      g_object_set(key, "text", text, NULL);
  }
}
示例#6
0
GladeXmlNode *
glade_accel_write (GladeAccelInfo * accel,
                   GladeXmlContext * context, gboolean write_signal)
{
  GladeXmlNode *accel_node;
  gchar *modifiers;

  g_return_val_if_fail (accel != NULL, NULL);
  g_return_val_if_fail (context != NULL, NULL);

  accel_node = glade_xml_node_new (context, GLADE_TAG_ACCEL);
  modifiers = glade_gtk_modifier_string_from_bits (accel->modifiers);

  glade_xml_node_set_property_string (accel_node, GLADE_TAG_ACCEL_KEY,
                                      gdk_keyval_name (accel->key));

  if (write_signal)
    glade_xml_node_set_property_string (accel_node, GLADE_TAG_ACCEL_SIGNAL,
                                        accel->signal);
  glade_xml_node_set_property_string (accel_node, GLADE_TAG_ACCEL_MODIFIERS,
                                      modifiers);

  g_free (modifiers);

  return accel_node;
}
示例#7
0
/**
 * dbusmenu_menuitem_property_set_shortcut:
 * @menuitem: The #DbusmenuMenuitem to set the shortcut on
 * @key: The keycode of the key to send
 * @modifier: A bitmask of modifiers used to activate the item
 * 
 * Takes the modifer described by @key and @modifier and places that into
 * the format sending across Dbus for shortcuts.
 * 
 * Return value: Whether it was successful at setting the property.
 */
gboolean
dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, guint key, GdkModifierType modifier)
{
	g_return_val_if_fail(DBUSMENU_IS_MENUITEM(menuitem), FALSE);
	g_return_val_if_fail(gtk_accelerator_valid(key, modifier), FALSE);

	const gchar * keyname = gdk_keyval_name(key);
	g_return_val_if_fail(keyname != NULL, FALSE);

	GVariantBuilder builder;
	g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY);

	if (modifier & GDK_CONTROL_MASK) {
		g_variant_builder_add(&builder, "s", DBUSMENU_MENUITEM_SHORTCUT_CONTROL);
	}
	if (modifier & GDK_MOD1_MASK) {
		g_variant_builder_add(&builder, "s", DBUSMENU_MENUITEM_SHORTCUT_ALT);
	}
	if (modifier & GDK_SHIFT_MASK) {
		g_variant_builder_add(&builder, "s", DBUSMENU_MENUITEM_SHORTCUT_SHIFT);
	}
	if (modifier & GDK_SUPER_MASK) {
		g_variant_builder_add(&builder, "s", DBUSMENU_MENUITEM_SHORTCUT_SUPER);
	}

	g_variant_builder_add(&builder, "s", keyname);

	GVariant * inside = g_variant_builder_end(&builder);
	g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY);
	g_variant_builder_add_value(&builder, inside);
	GVariant * outsidevariant = g_variant_builder_end(&builder);

	return dbusmenu_menuitem_property_set_variant(menuitem, DBUSMENU_MENUITEM_PROP_SHORTCUT, outsidevariant);
}
gboolean browser_key_event(GtkWidget *widget, GdkEventKey *event)
{
	char key = gdk_keyval_name(event->keyval)[0];

	int index = 0;
	for (int a = 0; a < tex_names.size(); a++)
	{
		if (tex_names[a] == selected_tex)
			index = a;
	}

	if (event->keyval == GDK_Return)
		gtk_dialog_response(GTK_DIALOG(browser_dialog), GTK_RESPONSE_ACCEPT);

	if (event->keyval == GDK_Up && index - browser_columns >= 0)
		index -= browser_columns;

	if (event->keyval == GDK_Left && index > 0)
		index--;

	if (event->keyval == GDK_Right && index < tex_names.size() - 1)
		index++;

	if (event->keyval == GDK_Down && index < tex_names.size() - browser_columns)
		index += browser_columns;

	selected_tex = tex_names[index];
	scroll_to_selected_texture(widget);
	gdk_window_invalidate_rect(widget->window, &widget->allocation, false);

	return true;
}
示例#9
0
void
on_next_button_clicked (GtkWidget *next_button, GdkEventKey *event, AD data)
// 按下『F3』找下一個符合字串 
// *因為無法把searchWord正確傳遞,所以無法正常使用此函式。 
{
  const gchar *text;
  GtkTextBuffer *buffer;
  GtkTextMark *last_pos;
  GtkTextIter iter;
   
  if( !strcmp( gdk_keyval_name( event->keyval ), "F3" ) ) {
         
    
    text = "e" ; // 預設搜尋e 
    //text = data->searchWord;
    
    buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data->textview));

    last_pos = gtk_text_buffer_get_mark (buffer, "last_pos");
    if (last_pos == NULL)
      gtk_text_buffer_get_start_iter (buffer, &iter); // 若無,就從頭搜尋 
    else
      gtk_text_buffer_get_iter_at_mark (buffer, &iter, last_pos);
    //find (GTK_TEXT_VIEW (data->textview), text, &iter);
    
    find (GTK_TEXT_VIEW (data->textview), text, &iter);
  
  }
}
gboolean
on_dialog_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) {
    GtkLabel *label = (GtkLabel *) G_OBJECT (user_data);
    if (!pressed) {
        pressed = TRUE;
        gtk_label_set_text (label, "");
    }
    switch (event->keyval)
    {
        case GDK_Control_L:
        case GDK_Control_R:
            gtk_label_set_text (label, g_strconcat (gtk_label_get_text (label), "<control>", NULL));
            break;
        case GDK_Shift_L:
        case GDK_Shift_R:
            gtk_label_set_text (label, g_strconcat (gtk_label_get_text (label), "<shift>", NULL));
            break;
        case GDK_Alt_L:
        case GDK_Alt_R:
            gtk_label_set_text (label, g_strconcat (gtk_label_get_text (label), "<alt>", NULL));
            break;
        case GDK_Super_L:
        case GDK_Super_R:
            gtk_label_set_text (label, g_strconcat (gtk_label_get_text (label), "<super>", NULL));
            break;
        default:
            gtk_label_set_text (label, g_strconcat (gtk_label_get_text (label), gdk_keyval_name (event->keyval), NULL));
    }
    return FALSE;
}
示例#11
0
文件: gdk.c 项目: amery/clip-angelo
/* Converts a key value into a symbolic name. The names are the same as those
   in the <clip-gdk.ch> header file but without the leading "GDK_". */
int
clip_GDK_KEYVALNAME(ClipMachine * ClipMachineMemory)
{
   guint     keyval = INT_OPTION(ClipMachineMemory, 1, 0);

   _clip_retc(ClipMachineMemory, gdk_keyval_name(keyval));
   return 0;
}
bool AnnotationPropertiesDialog::on_key_press_event(GdkEventKey* event)
{
	string key = gdk_keyval_name (event->keyval);
	if ( key == "Return" || key == "KP_Enter"  ) {
		onButtonClicked(Gtk::RESPONSE_OK);
		return true;
	}
	return Gtk::Dialog::on_key_press_event(event);
}
示例#13
0
static void cb_key_fire2(GtkWidget *widget, GdkEventKey *event, gpointer data) {
	if(!dialog)
		return;

	gtk_entry_set_text(GTK_ENTRY(widget), gdk_keyval_name(event->keyval));
	newflags->fire2_key = event->keyval;

	set_flags_changed(TRUE);
}
示例#14
0
void
conf_set_control_key (gint i, guint keyval)
{
  char buffer[64];
  gchar *keyval_name;

  g_snprintf (buffer, sizeof (buffer), KEY_CONTROL_KEY, i);
  keyval_name = gdk_keyval_name (keyval);
  g_settings_set_string (settings, buffer, keyval_name);
}
示例#15
0
static void
gdkrecord_event_key (GdkEventKey *event,
                     gdouble      begin,
                     gdouble      end)
{
    const gchar *name;

    name = gdk_keyval_name (event->keyval);
    gdkrecord_event_log (event, begin, end, name);
}
std::string
keyval_name (unsigned int key)
{
    std::string result;
    gchar * kname = gdk_keyval_name(key);
    if (not_nullptr(kname))
        result = std::string((char *) kname);

    return result;
}
示例#17
0
// we use the string versions of the keys for now..
static gint keypress( GtkWidget* widget, GdkEventKey* event, gpointer data ){
	gint ret;

	IWindowListener *pListen = static_cast<IWindowListener *>( data );
	ret = pListen->OnKeyPressed( gdk_keyval_name( event->keyval ) );
	if ( ret ) {
		gtk_signal_emit_stop_by_name( GTK_OBJECT( widget ), "key_press_event" );
	}
	return ret;
}
示例#18
0
static gint
keyboard_event_handler(GtkWidget *mk, GdkEventKey *event, gpointer ignored)
{
	int		note;
	char		*key;
	guint		keyval;
	GdkKeymapKey	kk;
	PianoKeyboard	*pk = PIANO_KEYBOARD(mk);

        (void) ignored;

	/* We're not using event->keyval, because we need keyval with level set to 0.
	   E.g. if user holds Shift and presses '7', we want to get a '7', not '&'. */
	kk.keycode = event->hardware_keycode;
	kk.level = 0;
	kk.group = 0;

	keyval = gdk_keymap_lookup_key(NULL, &kk);

	key = gdk_keyval_name(gdk_keyval_to_lower(keyval));

	if (key == NULL) {
		g_message("gtk_keyval_name() returned NULL; please report this.");
		return FALSE;
	}

	note = key_binding(pk, key);

	if (note < 0) {
		/* Key was not bound.  Maybe it's one of the keys handled in jack-keyboard.c. */
		return FALSE;
	}

	if (note == 128) {
		if (event->type == GDK_KEY_RELEASE) {
			rest (pk);
		}

		return TRUE;
	}

	note += pk->octave * 12;

	assert(note >= 0);
	assert(note < NNOTES);

	if (event->type == GDK_KEY_PRESS) {
		press_key(pk, note);

	} else if (event->type == GDK_KEY_RELEASE) {
		release_key(pk, note);
	}

	return TRUE;
}
示例#19
0
void kbd_test_cb(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
{
	int fn_ser = 75;	// Fn key position
	DeBug(printf("key name: %s\n", gdk_keyval_name(event->keyval)))
	DeBug(printf("hw_keycode: %d\n", event->hardware_keycode))
	DeBug(printf("keycode[%d]: %d\n", idx, keycode[idx]))

	gdk_color_parse("#CD9B1D", &btn_pressed_color);


	if (idx < SUM_KEY) {
		if (event->hardware_keycode == keycode[idx]) {
			if (event->type == GDK_KEY_PRESS) {
				gtk_widget_modify_bg (button[idx], GTK_STATE_NORMAL, &btn_pressed_color);
				gtk_widget_modify_bg (button[idx], GTK_STATE_SELECTED, &btn_pressed_color);
				gtk_widget_modify_bg (button[idx], GTK_STATE_PRELIGHT, &btn_pressed_color);
			} else if (event->type == GDK_KEY_RELEASE) {
				gtk_widget_modify_bg (button[idx], GTK_STATE_NORMAL, &btn_passed_color);
				gtk_widget_modify_bg (button[idx], GTK_STATE_SELECTED, &btn_passed_color);
				gtk_widget_modify_bg (button[idx], GTK_STATE_PRELIGHT, &btn_passed_color);
				if (idx == fn_ser) {
					gtk_widget_modify_bg (button[idx + 2], GTK_STATE_NORMAL, &btn_guide_color);
					gtk_widget_modify_bg (button[idx + 2], GTK_STATE_SELECTED, &btn_guide_color);
					gtk_widget_modify_bg (button[idx + 2], GTK_STATE_PRELIGHT, &btn_guide_color);
					idx += 2;
				} else {
					if (idx != SUM_KEY - 1) {
						gtk_widget_modify_bg (button[idx + 1], GTK_STATE_NORMAL, &btn_guide_color);
						gtk_widget_modify_bg (button[idx + 1], GTK_STATE_SELECTED, &btn_guide_color);
						gtk_widget_modify_bg (button[idx + 1], GTK_STATE_PRELIGHT, &btn_guide_color);
					}
					idx += 1;
				}
			} else {
				;
			}
//		} else {
//			printf("else\n");
		}
	} else {
		kbd_result = 0;
		g_usleep(1000000);
		gtk_widget_destroy(widget);
		gtk_main_quit();
		return;
	}
	printf("\n");

	if (idx >= SUM_KEY) {
		gtk_label_set_text(GTK_LABEL(label), "键盘测试完毕,请按任意键退出。");
	}

	return;
}
示例#20
0
const char* global_keys_find( unsigned int key ){
	const char *s;
	if ( key == 0 ) {
		return "";
	}
	s = gdk_keyval_name( key );
	if ( !s ) {
		return "";
	}
	return s;
}
// key_release_event: When a keyboard key is released
// ----------------------------------------------- >>
gboolean key_release_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
{
	guint keyval = get_keyval(event);

	string key = gdk_keyval_name(keyval);
	//printf("\"%s\"\n", key.c_str());

	binds.unset(key, (GdkModifierType)event->state, &released_keys);
	keys_edit();
	released_keys.clear();

	return false;
}
示例#22
0
文件: options.cpp 项目: EQ4/seq42
 void set( unsigned int val )
 {
     char buf[256] = "";
     char* special = gdk_keyval_name( val );
     char* p_buf = &buf[strlen(buf)];
     if (special)
         snprintf( p_buf, sizeof buf - (p_buf - buf), "%s", special );
     else
         snprintf( p_buf, sizeof buf - (p_buf - buf), "'%c'", (char)val );
     set_text( buf );
     int width = strlen(buf);
     set_width_chars( 1 <= width ? width : 1 );
 }
示例#23
0
static void
translate_key_event (GdkDisplay              *display,
                     GdkX11DeviceManagerCore *device_manager,
                     GdkEvent                *event,
                     XEvent                  *xevent)
{
  GdkKeymap *keymap = gdk_keymap_get_for_display (display);
  GdkModifierType consumed, state;

  event->key.type = xevent->xany.type == KeyPress ? GDK_KEY_PRESS : GDK_KEY_RELEASE;
  event->key.time = xevent->xkey.time;
  gdk_event_set_device (event, device_manager->core_keyboard);

  event->key.state = (GdkModifierType) xevent->xkey.state;
  event->key.group = _gdk_x11_get_group_for_state (display, xevent->xkey.state);
  event->key.hardware_keycode = xevent->xkey.keycode;

  event->key.keyval = GDK_KEY_VoidSymbol;

  gdk_keymap_translate_keyboard_state (keymap,
                                       event->key.hardware_keycode,
                                       event->key.state,
                                       event->key.group,
                                       &event->key.keyval,
                                       NULL, NULL, &consumed);

  state = event->key.state & ~consumed;
  _gdk_x11_keymap_add_virt_mods (keymap, &state);
  event->key.state |= state;

  event->key.is_modifier = _gdk_x11_keymap_key_is_modifier (keymap, event->key.hardware_keycode);

  _gdk_x11_event_translate_keyboard_string (&event->key);

#ifdef G_ENABLE_DEBUG
  if (_gdk_debug_flags & GDK_DEBUG_EVENTS)
    {
      g_message ("%s:\t\twindow: %ld     key: %12s  %d",
                 event->type == GDK_KEY_PRESS ? "key press  " : "key release",
                 xevent->xkey.window,
                 event->key.keyval ? gdk_keyval_name (event->key.keyval) : "(none)",
                 event->key.keyval);

      if (event->key.length > 0)
        g_message ("\t\tlength: %4d string: \"%s\"",
                   event->key.length, event->key.string);
    }
#endif /* G_ENABLE_DEBUG */
  return;
}
示例#24
0
/**
 * spice_grab_sequence_as_string:
 * @sequence:
 *
 * Returns: (transfer full): a newly allocated string representing the key sequence
 **/
gchar *spice_grab_sequence_as_string(SpiceGrabSequence *sequence)
{
	GString *str = g_string_new("");
	int i;

	for (i = 0 ; i < sequence->nkeysyms ; i++) {
		if (i > 0)
			g_string_append_c(str, '+');
		g_string_append(str, gdk_keyval_name(sequence->keysyms[i]));
	}

	return g_string_free(str, FALSE);

}
// key_press_event: When a keyboard key is pressed
// -------------------------------------------- >>
gboolean key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
{
	//printf("keyval: %d (%s)\nhardware: %d\n", event->keyval, gdk_keyval_name(event->keyval), event->hardware_keycode);

	down_pos.set(mouse);

	guint keyval = get_keyval(event);

	string key = gdk_keyval_name(keyval);
	//printf("\"%s\"\n", key.c_str());
	binds.set(key, (GdkModifierType)event->state, &pressed_keys);
	keys_edit();
	pressed_keys.clear();

	return false;
}
示例#26
0
bool PreferencesWindow::on_key_press_event(GdkEventKey* event,
					   Gtk::Button *button,
					   Glib::ustring key)
{
  Glib::RefPtr<Gnome::Conf::Client> &client
    = MainWindow::instance().gconf_client;
  Glib::ustring dir = MainWindow::instance().gconf_dir;

  grab_connection.disconnect();
  button->remove_modal_grab();

  Glib::ustring name = gdk_keyval_name(event->keyval);
  button->set_label(name);
  client->set(dir + key, name);

  return true;
}
示例#27
0
static gchar *get_full_keystr(guint keyval, guint state)
{
	/* strlen("Ctrl+Alt+Shift+Meta+")+1 == 21 */
	const gsize max_modstr_len = 21;
	gchar modstr[max_modstr_len];
	gboolean found = FALSE;
	const gchar *keystr = gdk_keyval_name(keyval);
	const gchar *keystrmap[] = KEYSTRING_MAP;
	modstr[0] = '\0';

	if((state&GDK_SHIFT_MASK) != 0)
	{
		g_strlcat(modstr, "Shift+", max_modstr_len);
	}

	if((state&GDK_CONTROL_MASK) != 0)
	{
		g_strlcat(modstr, "Ctrl+", max_modstr_len);
	}

	if((state&GDK_MOD1_MASK) != 0)
	{
		g_strlcat(modstr, "Alt+", max_modstr_len);
	}

	if((state&GDK_META_MASK) != 0 || (state&GDK_SUPER_MASK) != 0)
	{
		g_strlcat(modstr, "Meta+", max_modstr_len);
	}

	/* Translate GDK key name to mpv key name */
	for(gint i = 0; !found && keystrmap[i]; i += 2)
	{
		gint rc = g_ascii_strncasecmp(	keystr,
						keystrmap[i+1],
						KEYSTRING_MAX_LEN );

		if(rc == 0)
		{
			keystr = keystrmap[i];
			found = TRUE;
		}
	}

	return (strlen(keystr) > 0)?g_strconcat(modstr, keystr, NULL):NULL;
}
示例#28
0
文件: luah.c 项目: pawelz/luakit
void
luaH_keystr_push(lua_State *L, guint keyval)
{
    gchar ucs[7];
    guint ulen;
    guint32 ukval = gdk_keyval_to_unicode(keyval);

    /* check for printable unicode character */
    if (g_unichar_isgraph(ukval)) {
        ulen = g_unichar_to_utf8(ukval, ucs);
        ucs[ulen] = 0;
        lua_pushstring(L, ucs);
    }
    /* sent keysym for non-printable characters */
    else
        lua_pushstring(L, gdk_keyval_name(keyval));
}
示例#29
0
std::string EventManager::getGDKEventStr(GdkEventKey* event) {
	std::string returnValue("");

	// Don't react on modifiers only (no actual key like A, 2, U, etc.)
	if (isModifier(event)) {
		return returnValue;
	}

	// Convert the GDKEvent state into modifier flags
	const unsigned int modifierFlags = _modifiers.getKeyboardFlags(event->state);

	// Construct the complete string
	returnValue += _modifiers.getModifierStr(modifierFlags, true);
	returnValue += (returnValue != "") ? "-" : "";
	returnValue += gdk_keyval_name(gdk_keyval_to_upper(event->keyval));

	return returnValue;
}
示例#30
0
std::string EventManager::getAcceleratorStr(const IEventPtr& event, bool forMenu) {
	std::string returnValue = "";

	IAccelerator& accelerator = findAccelerator(event);

	unsigned int keyVal = accelerator.getKey();
	const std::string keyStr = (keyVal != 0) ? gdk_keyval_name(keyVal) : "";

	if (keyStr != "") {
		// Return a modifier string for a menu
		const std::string modifierStr = getModifierStr(accelerator.getModifiers(), forMenu);

		const std::string connector = (forMenu) ? "-" : "+";

		returnValue = modifierStr;
		returnValue += (modifierStr != "") ? connector : "";
		returnValue += keyStr;
	}

	return returnValue;
}