244 |
244 |
hook_dissociate_full (item->hook, (HookFunction) hook_cb, check);
|
245 |
245 |
}
|
246 |
246 |
|
|
247 |
static void hotkey_changed (GtkAccelMap *object, gchar *accel_path, guint accel_key,
|
|
248 |
GdkModifierType accel_mods, gpointer user_data)
|
|
249 |
{
|
|
250 |
if (g_str_has_prefix (accel_path, "<audacious>/"))
|
|
251 |
{
|
|
252 |
gchar *entry = g_strconcat ("key_", accel_path+strlen("<audacious>/"), NULL);
|
|
253 |
gchar *name=gtk_accelerator_name (accel_key, accel_mods);
|
|
254 |
aud_set_string ("gtkui", entry, name);
|
|
255 |
g_free (name);
|
|
256 |
g_free (entry);
|
|
257 |
}
|
|
258 |
}
|
|
259 |
|
247 |
260 |
static void populate_menu (GtkWidget * shell, const struct MenuItem * items,
|
248 |
261 |
gint n_items, GtkAccelGroup * accel)
|
249 |
262 |
{
|
... | ... | |
292 |
305 |
else
|
293 |
306 |
{
|
294 |
307 |
sub = gtk_menu_new ();
|
|
308 |
gtk_menu_set_accel_group (GTK_MENU (sub), accel);
|
295 |
309 |
populate_menu (sub, item->items, item->n_items, accel);
|
296 |
310 |
}
|
297 |
311 |
|
... | ... | |
303 |
317 |
if (! widget)
|
304 |
318 |
continue;
|
305 |
319 |
|
306 |
|
if (item->key)
|
307 |
|
gtk_widget_add_accelerator (widget, "activate", accel, item->key,
|
308 |
|
item->mod, GTK_ACCEL_VISIBLE);
|
|
320 |
guint fkey = 0;
|
|
321 |
GdkModifierType fmod = 0;
|
|
322 |
if (item->identifier)
|
|
323 |
{
|
|
324 |
gchar *temp = g_strconcat ("key_", item->identifier, NULL);
|
|
325 |
gchar *nkey = aud_get_string ("gtkui", temp);
|
|
326 |
gtk_accelerator_parse (nkey, &fkey, &fmod);
|
|
327 |
g_free (nkey);
|
|
328 |
g_free (temp);
|
|
329 |
}
|
|
330 |
|
|
331 |
if(!fkey)
|
|
332 |
{
|
|
333 |
fkey = item->key;
|
|
334 |
fmod = item->mod;
|
|
335 |
}
|
|
336 |
|
|
337 |
if (fkey)
|
|
338 |
{
|
|
339 |
if (item->identifier)
|
|
340 |
{
|
|
341 |
gchar *accel_path=g_strconcat ("<audacious>/", item->identifier, NULL);
|
|
342 |
gtk_menu_item_set_accel_path (GTK_MENU_ITEM (widget), accel_path);
|
|
343 |
gtk_accel_map_add_entry (accel_path, fkey, fmod);
|
|
344 |
g_free (accel_path);
|
|
345 |
}
|
|
346 |
else
|
|
347 |
gtk_widget_add_accelerator (widget, "activate", accel, fkey,
|
|
348 |
fmod, GTK_ACCEL_VISIBLE);
|
|
349 |
}
|
309 |
350 |
|
310 |
351 |
gtk_widget_show (widget);
|
311 |
352 |
gtk_menu_shell_append ((GtkMenuShell *) shell, widget);
|
... | ... | |
316 |
357 |
{
|
317 |
358 |
GtkWidget * bar = gtk_menu_bar_new ();
|
318 |
359 |
populate_menu (bar, main_items, G_N_ELEMENTS (main_items), accel);
|
|
360 |
g_signal_connect (gtk_accel_map_get (), "changed", G_CALLBACK (hotkey_changed), NULL);
|
319 |
361 |
return bar;
|
320 |
362 |
}
|
321 |
363 |
|
322 |
364 |
GtkWidget * make_menu_main (GtkAccelGroup * accel)
|
323 |
365 |
{
|
324 |
366 |
GtkWidget * shell = gtk_menu_new ();
|
|
367 |
gtk_menu_set_accel_group (GTK_MENU (shell), accel);
|
325 |
368 |
populate_menu (shell, main_items, G_N_ELEMENTS (main_items), accel);
|
326 |
369 |
return shell;
|
327 |
370 |
}
|
... | ... | |
329 |
372 |
GtkWidget * make_menu_rclick (GtkAccelGroup * accel)
|
330 |
373 |
{
|
331 |
374 |
GtkWidget * shell = gtk_menu_new ();
|
|
375 |
gtk_menu_set_accel_group (GTK_MENU (shell), accel);
|
332 |
376 |
populate_menu (shell, rclick_items, G_N_ELEMENTS (rclick_items), accel);
|
333 |
377 |
return shell;
|
334 |
378 |
}
|
... | ... | |
336 |
380 |
GtkWidget * make_menu_tab (GtkAccelGroup * accel)
|
337 |
381 |
{
|
338 |
382 |
GtkWidget * shell = gtk_menu_new ();
|
|
383 |
gtk_menu_set_accel_group (GTK_MENU (shell), accel);
|
339 |
384 |
populate_menu (shell, tab_items, G_N_ELEMENTS (tab_items), accel);
|
340 |
385 |
return shell;
|
341 |
386 |
}
|
342 |
|
-- a/ui_gtk.c 2012-03-01 22:13:44.702653861 -0600
|
|
387 |
++ b/ui_gtk.c 2012-03-01 22:13:29.522779015 -0600
|
... | ... | |
483 |
483 |
|
484 |
484 |
static gboolean window_keypress_cb (GtkWidget * widget, GdkEventKey * event, void * unused)
|
485 |
485 |
{
|
|
486 |
/* spacebar is handled specially by treeviews (libaudgui/list.c) so it needs some love here */
|
|
487 |
if ((event->keyval == ' ' && ! (event->state & GDK_CONTROL_MASK)) && G_OBJECT_TYPE (G_OBJECT (gtk_window_get_focus (GTK_WINDOW (widget)))) == GTK_TYPE_TREE_VIEW)
|
|
488 |
return FALSE;
|
|
489 |
|
|
490 |
/* prevent hotkeys from interfering with text input */
|
|
491 |
if (gtk_window_propagate_key_event(GTK_WINDOW (widget), event))
|
|
492 |
return TRUE;
|
|
493 |
|
486 |
494 |
switch (event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK))
|
487 |
495 |
{
|
488 |
496 |
case GDK_CONTROL_MASK:
|