<div>> I did a test with "show" and "hide", I didn't found where I could connect on GtkMenuShell's "selection-done" signal<br></div><div><br></div><div>In the "show" signal handler, at the same time you connect to "key-press-event".<br></div><div><br></div><div>> Especially I'm not sure "selection-done" will occur<br></div><div><br></div><div>It will: the name is misleading, but the signal is emitted when the menu is closed, whether an item has been selected or not.<br></div><div>That said, you should be able to connect to "deactivate", "hide" or "destroy" without it making a difference.<br></div><div><br></div><div>> I suppose I can connect multiple handler on the same signal, right?<br></div><div><br></div><div>Yes, they will be called in the order in which they were connected.<br></div><div><br></div><div>> printf("SPACE KEY PRESSED!");<br></div><div><br></div><div>`\n` is missing, this will be displayed only at program exit.<br></div><div><br></div><div>For the rest, I suggest that you create a merge request on your own repository so that we can discuss the code, it will be much more convenient than by mail.<br></div><div>The procedure is the same as for creating a "normal" request, you just have to redirect the target branch.<br></div><div><br></div><div class="protonmail_signature_block"><div class="protonmail_signature_block-user"><div>Cheers,<br></div><div>Gaël<br></div><div></div></div></div><div><br></div><div class="protonmail_quote">
        ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐<br>
        On Friday, September 3rd, 2021 at 12:36 PM, Sylvain Viart <sylvain@opensource-expert.com> wrote:<br>
        <blockquote class="protonmail_quote" type="cite">

    <div class="moz-cite-prefix">Hi Gaël,<br>
      <br>
      Thanks.<br>
      <br>
      But not sufficient for me to understand.<br>
      <br>
      I did a test with "show" and "hide", I didn't found where I could
      connect on GtkMenuShell's "selection-done" signal. Especially I'm
      not sure "selection-done" will occur, scenario:<br>
      <br>
      open the menu to track unwanted item:<br>
      <ol>
        <li>click to open</li>
        <li>navigate up down key of with mouse over</li>
        <li>hit delete key, the item is removed and menu updated</li>
        <li>you can do it for some more item too.</li>
        <li>click else where to continue or close the menu, no selection
          have been done.<br>
        </li>
      </ol>
      <p>My commit looks like:</p>
      <p><a href="https://gitlab.xfce.org/Sylvain/xfce4-clipman-plugin/-/commit/8e8e3c69ec9d70cf1fc138826e8a778f895ff0bb#9ccec1d9c5b9b6500f958458cfe0b9d1a4ad557e" target="_blank" rel="noreferrer nofollow noopener">https://gitlab.xfce.org/Sylvain/xfce4-clipman-plugin/-/commit/8e8e3c69ec9d70cf1fc138826e8a778f895ff0bb#9ccec1d9c5b9b6500f958458cfe0b9d1a4ad557e</a><br>
      </p>
      There's already a callback on "show":  _clipman_menu_update_list()<br>
      I suppose I can connect multiple handler on the same signal,
      right?<br>
      <br>
      If I remove the hide handler which crashes, and change for DEL
      key, it seems never reached,<br>
      <br>
      <font face="monospace">+++ b/panel-plugin/menu.c<br>
        @@ -637,20 +637,20 @@ clipman_menu_class_init (ClipmanMenuClass
        *klass)<br>
         static gboolean<br>
         _clipman_menu_keyboard_event (GtkWidget *widget, GdkEventKey
        *event, gpointer data)<br>
         {<br>
        -  if (event->keyval == GDK_KEY_space)<br>
        +  if (event->keyval == GDK_KEY_Delete)<br>
           {<br>
        -    printf("SPACE KEY PRESSED!");<br>
        +    printf("DEL KEY PRESSED!");<br>
             return TRUE;<br>
           }<br>
           return FALSE;<br>
         }<br>
         <br>
      </font>but it is connected, and putting a gdb break point in a
      keyboard handler, has interesting result, the keyboard nor the
      mouse works anymore....  <font face="monospace"><br>
      </font><br>
      Do gtk knows that my handler is expecting <font face="monospace">GdkEventKey
        *event</font> data, automatically?<br>
      I mean, the prototype of _clipman_menu_update_list() is:<br>
      <br>
      static void _clipman_menu_update_list (ClipmanMenu *menu) <br>
      <font face="monospace"></font><br>
      I read that keyboard handler must return bool, so signaling if
      they decided to grab the keystroke or not...<br>
      <br>
      To be continued,<br>
      Regards,<br>
      Sylvain.<br>
       <br>
      On 03/09/2021 10:49, Gaël Bonithon wrote:<br>
    </div>
    <blockquote type="cite">

      <div>You can just connect `my_keypress_function()` when the menu
        is shown (GtkWidget's "show" signal), then, when a key is
        pressed, you look at which key it is, which menu item is active,
        and act (or not) accordingly.<br>
      </div>
      <div><br>
      </div>
      <div>No need to bother with what you say in the first part, it
        should work by itself in this case.<br>
      </div>
      <div><br>
      </div>
      <div>Don't forget to disconnect `my_keypress_function()` when the
        menu disappears though (GtkMenuShell's "selection-done"
        signal should be fine).<br>
      </div>
      <div><br>
      </div>
      <div class="protonmail_signature_block">
        <div class="protonmail_signature_block-user">
          <div>Cheers,<br>
          </div>
          <div>Gaël<br>
          </div>
        </div>
      </div>
      <div><br>
      </div>
      <div class="protonmail_quote"> ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐<br>
        On Thursday, September 2nd, 2021 at 6:20 AM, Sylvain Viart
        <a href="mailto:sylvain@opensource-expert.com" rel="noreferrer nofollow noopener"><sylvain@opensource-expert.com></a> wrote:<br>
        <blockquote type="cite" class="protonmail_quote"> Hi,<br>
          <br>
          I would like to add 2 new key binding in clipman menu, in
          order to swap Secure Item as Clear Text, and also to delete
          any them directly from menu hitting del key.<br>
          <br>
          I lack gtk knowledge, what I found is that:<br>
          <br>
          the app seems to do a g_application_register<br>
          <br>
          <a rel="noreferrer nofollow noopener" target="_blank" href="https://docs.gtk.org/gio/method.Application.register.html">https://docs.gtk.org/gio/method.Application.register.html</a><br>
          <br>
          but, I think the sole purpose of this is to avoid duplicate
          running clipman.<br>
          <br>
          I also found, that I should add a keyboard mask somewhere
          GDK_KEY_PRESS_MASK<br>
          <br>
          <a rel="noreferrer nofollow noopener" target="_blank" href="https://stackoverflow.com/questions/44098084/how-do-i-handle-keyboard-events-in-gtk3">https://stackoverflow.com/questions/44098084/how-do-i-handle-keyboard-events-in-gtk3</a><br>
          <br>
          may be their in panel_plugin_register() ?<br>
          <br>
          <a rel="noreferrer nofollow noopener" target="_blank" href="https://gitlab.xfce.org/Sylvain/xfce4-clipman-plugin/-/blob/secure_item_dbus/panel-plugin/main-panel-plugin.c#L71">https://gitlab.xfce.org/Sylvain/xfce4-clipman-plugin/-/blob/secure_item_dbus/panel-plugin/main-panel-plugin.c#L71</a><br>
          <br>
          Then I may be able to add a callback<br>
          <br>
          <pre><code>g_signal_connect (G_OBJECT (window), <span>"key_press_event"</span>,
        G_CALLBACK (my_keypress_function), <span>NULL</span>);

</code></pre>
          to my own keyboard handler, and then dispatch on which
          keystroke I receive, right?<br>
          What about "activate" callback on enter key, should I call
          them after I introduce a keyboard handler?<br>
          <br>
          If you have code example, I would love to discover how it
          works. 😁<br>
          <br>
          Regards,<br>
          Sylvain. <br>
          <code></code>_____________________________________________
        </blockquote>
      </div>
      <pre wrap="">Xfce4-dev mailing list
<a href="mailto:Xfce4-dev@xfce.org" rel="noreferrer nofollow noopener">Xfce4-dev@xfce.org</a>
<a href="https://mail.xfce.org/mailman/listinfo/xfce4-dev" target="_blank" rel="noreferrer nofollow noopener">https://mail.xfce.org/mailman/listinfo/xfce4-dev</a></pre>
    </blockquote>
    <br>
    <br>
    <pre cols="72">--
Sylvain Viart - GNU/Linux Sysadmin/Developer/DevOps - France</pre>



        </blockquote><br>
    </div>