2

I would need a simple working example (using Gtkmm 3) of a ShortcutsWindow with just one ShortcutsShortcut that does not use a Gtk::Builder.

I have not been able to find such an example online. I am able to show window however shortcuts do not show.

BobMorane
  • 3,870
  • 3
  • 20
  • 42
Slawek
  • 88
  • 1
  • 7

2 Answers2

2

Here is a very simple example. You can build from it:

#include <gtkmm.h>
#include <iostream>

class MyShortcutsWindow : public Gtk::ShortcutsWindow
{

public:

    MyShortcutsWindow();

private:

    Gtk::ShortcutsShortcut m_shortcut;
    Gtk::ShortcutsGroup m_group;
    Gtk::ShortcutsSection m_section;

};

MyShortcutsWindow::MyShortcutsWindow()
{
    // Prints Gtkmm version:
    std::cout << "Gtkmm version : "
              << gtk_get_major_version() << "."
              << gtk_get_minor_version() << "."
              << gtk_get_micro_version()
              << std::endl;

    // 1. Create shorcut:
    // -------------------------------------------------------------

    // Set title:
    auto shortcutTitle = m_shortcut.property_title();
    shortcutTitle.set_value("Hit that to search");

    // Set type:
    auto shortcutType = m_shortcut.property_shortcut_type();
    shortcutType.set_value(Gtk::SHORTCUT_ACCELERATOR);

    // Set accelerator:
    auto shortcutAccelerator = m_shortcut.property_accelerator();
    shortcutAccelerator.set_value("<Ctrl>f");

    // 2. Create shortcut group:
    // -------------------------------------------------------------
    m_group.add(m_shortcut);

    // 3. Create shortcut section:
    // -------------------------------------------------------------
    m_section.add(m_group);

    // Make sure your section is visible. I have found if this is
    // not called, your section won't show until you have tried a
    // search first (weird):
    auto sectionVisibility = m_section.property_visible();
    sectionVisibility.set_value(true);

    // 4. Add the section to the window:
    // -------------------------------------------------------------
    add(m_section);
}

int main(int argc, char *argv[])
{
    auto app = Gtk::Application::create(argc, argv, "so.question.q66123196");

    MyShortcutsWindow window;
    window.show_all();

    return app->run(window);
}

It works with Gtkmm version 3.22.30 in my case. You need at most version 3.20 according to the docs.

BobMorane
  • 3,870
  • 3
  • 20
  • 42
0

Following up on BobMorane's answer: Calling show_all() on your Gtk::ShortcutsSection object will provide the same result as setting property_visible to true.

In the example provided:

    m_section.add(m_group);
    m_section.show_all();
    // 4. Add the section to the window:
    // -------------------------------------------------------------
    add(m_section);
DBambino
  • 1
  • 1