Project

General

Profile

change_shortcuts_v3.patch

anonymous password, March 02, 2012 05:35

View differences:

menus.c 2012-03-01 22:06:58.822666947 -0600
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: