Re: Thinking about the tasklist



Elijah Newren writes:

So, currently it can be done

> No it's not.  You either bind a key to an external command via
> gconf[1],

in a silly way

> or you modify Metacity itself if you don't want to run an
> external command.

or not at all.  We were talking about why `people were not writing
their own pager/window nav applets'.  If the way to `configure'
metacity is to hack it, I guess we found the answer: it cannot be done
[currently].

> Why can't you just use an external command, as Rob previously
> suggested?  (I believe you mentioned that your app took a long time
> to start--but why not have that app just always be running in the
> background, and have another app which launches quickly be bound to
> the keybinding and forward the message to your real app?)

Yes, I tried that.  In fact, the first version used this hack

    WindowMenu *menu;

    #include <signal.h>
    #include <fcntl.h>

    void sig_watcher (int);
    void sig_catcher (gpointer, gint, GdkInputCondition);
    int signal_fds[2];

    void
    setup_signal()
    {
      /* Set up to catch signals */

      if (pipe (signal_fds) == 0)
        {
          long arg;
          signal (SIGUSR1, sig_watcher);
          gdk_input_add (signal_fds[0], GDK_INPUT_READ, sig_catcher, NULL);
          arg = fcntl (signal_fds[0], F_GETFL);
          fcntl (signal_fds[0], F_SETFL, arg | O_NONBLOCK);
        }

    }

    /* Catch unix signals, write them to the pipe */
    void
    sig_watcher(int signum)
    {
      write (signal_fds[1], &signum, sizeof (signum));
    }

    /* Get signals from the pipe.  *Now* it is safe to call gtk */
    void
    sig_catcher (gpointer d, gint fd, GdkInputCondition cond)
    {
      int signum;

      while (read(signal_fds[0], &signum, sizeof (signum)) > 0)
        window_menu_popup_menu (menu, 0, 0);
    }

    int
    main (int argc, char **argv)
    {
     ...
     setup_signal ();
  
    }

and a second app would `killall -USR1 keywise'.  But I deleted it
before my first public release of keywise.c, because it's gross, I'm
surely not the only one who needs it, and it will only give you a
couple of key bindings, where eventually I'd like to have about 10.

In addition to the number of bindings, I'd like to be able to change
them dynamically (like in a menu: hover above the window-group or an
individual window, press a key, and have that bound to cycle that
window-group or go to that individual window).

I could hardcode them for myself, but that won't work if you want to
contribute a usable window switching metacity addon.  I don't think
that spawning gconf-editor is the way we want to go.

> If Metacity wanted infinite configurability such as Sawfish was
> designed for, Metacity wouldn't have been written--Sawfish was already
> available.  (In other words, you can't do this in Metacity.  By
> design.)

Ok, I see that.  And libwnck is quite an acceptable solution for me,
esp. to test out new ideas, it's just the keybindings.

Jan.

-- 
Jan Nieuwenhuizen <janneke gnu org> | GNU LilyPond - The music typesetter
http://www.xs4all.nl/~jantien       | http://www.lilypond.org




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]