GithubHelp home page GithubHelp logo

hellosystem / menu Goto Github PK

View Code? Open in Web Editor NEW

This project forked from felixonmars/panda-topbar

42.0 42.0 14.0 959 KB

Global menu bar written in Qt

C++ 96.21% CMake 2.97% QMake 0.24% C 0.27% QML 0.30%
gobal-menu hellosystem qt

menu's People

Contributors

alphamodh0 avatar antony-jr avatar b100w11 avatar badlop avatar balyaev-d-a avatar bitigchi avatar bittin avatar cococr300 avatar comradekingu avatar dynks avatar hugok79 avatar ijiki16 avatar jsm222 avatar larshenrikoern avatar louies0623 avatar maronghappy avatar milotype avatar piker3 avatar preyk avatar probonopd avatar reionwong avatar samob avatar satoq9 avatar sejcjan avatar skyonal avatar taraspanchenko avatar vitorhcl avatar weblate avatar yarons avatar ykla avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

menu's Issues

Have to click on menu entry in Qt 5.15.0

After updating Qt 5.14.2 to 5.15.0 menus do not work properly any more: It is no longer possible to click on a menu, hold the mouse pressed down while selecting a menu entry, and then select the menu entry by releasing the mouse over the chosen menu entry. Instead you now have to click on the chosen menu entry for the action to be executed.

Is this a known issue with Qt on FreeBSD @adriaandegroot?

Implement volume for FreeBSD

my volume is about 75%, and my audio work. but when i place my cursor on that, the current volume displayed -1 and there is no volume icon.

sorry for my bad english.

Prevent menu from being displayed as ">>" ever

Prevent menu from being displayed as ">>" if the font does not fit vertically:

image

image

This is happening e.g., if the font is too large (for example, because the proper UI font is not installed on the system). Instead, we want the text to still be centered in the menu bar (and cut off if needed).

This is how it should look:

image

Integrate DSBExec like functionality into the search box; consider Alt-F2 expectations

From the foot of today's helloSystem/ISO#68 (comment):

… I'll take a look at this later. …

– and more generally, from the outset I was astonished to find the runner (currently DSBExec) not running when expected. There was brief discussion of this a few days ago … I can no longer find it (maybe it was in IRC?) but I assumed a general keyboard layout/map issue.

Since working around the main mapping issue, I see that an additional, more specific workaround is necessary:

image

Related

https://nomadbsd.org/handbook/handbook.html#globalkeybindings and other precedents

#8

helloSystem/ISO@76fa52d#diff-54b785d2d83f98fdc801bf23a2074a42ded323011d55b204073fc7905bae1ad1R320

#13

helloSystem/hello#8

helloSystem/hello#46

helloSystem/hello#58

https://github.com/helloSystem/docs/blob/main/user/components/preferences/keyboard.md

Quirks when selecting the only match

  • If you type fast, then it fails
  • In that situation, if you try to fix it by pressing the Arrow-Down button, it won't work

Any ideas how to work around this?

Make it work with the default Qt platform theme (QGenericUnixTheme), too

https://blog.broulik.de/2016/10/global-menus-returning/

KDE introduces _KDE_NET_WM_APPMENU_OBJECT_PATH and _KDE_NET_WM_APPMENU_SERVICE_NAME with the result that with platform themes (including the default Qt one) which do not have those global menus don't work anymore.

Those of you familar with Wayland might notice that it uses global window IDs, which don’t exist in a Wayland world.

Is there a way to do without this? I would be fine with a solution that leaves Wayland broken, if we can get global menus to work with the default Qt Unix platform theme again.

Make it possible to click on the menu entry for a submenu

E.g., when the user clicks on "Applications", the /Applications directory should be opened in the File Manager.

image

// TODO: Make it possible to open the directory that contains the app by clicking on the submenu itself, not one of its items,
// https://stackoverflow.com/a/3799197 (seems to require subclassing QMenu; I tend to avoid subclassing Qt)

Make global menu work for JetBrains (Java) applications

Make global menu work for JetBrains (Java) applications: bring the contents of (1) into (2).
This will also make the commands searchable via the search field in the global menu and the system-wide ⌘+Space, which large IDEs like the ones from JetBrains would benefit from.

image

How?

image

"Close" menu item with ⌘+W if the application does not use ⌘+W already

I would like to be able to close all windows using ⌘+W if ⌘+W is not already used by the application for another purpose (such as closing tabs, as e.g., Falkon does).

Hence, we need to first check the menu of the running application whether it is using ⌘+W, and only assign this shortcut to our "Close" menu entry if it does not.

Make Firefox and Thunderbird work with the global menu

https://askubuntu.com/a/1288592/25036[HowTo] Enabling KDE global menu support in Mozilla Firefox and Thunderbird - Contributions / Tutorials - Manjaro Linux Forum (2020-10-01) essentially:

  • four Linux KDE Plasma-oriented options for Firefox, not all of which offer source code, not all of which are maintained/supported
  • three Linux KDE Plasma-oriented options for Thunderbird, one of which offers source code.

Re: https://askubuntu.com/questions/1288516/how-to-use-kde-global-menu-with-firefox#comment2187794_1288516 ("… good idea to keep the question open …") consider voting up https://askubuntu.com/a/1288825/25036 without expecting it to become an accepted answer. Via this answer:

– vote appropriately; maybe something there is (or will become) not specific to Plasma on Linux.


https://github.com/helloSystem/hello/wiki/Status/_compare/ea548f3c47ea6a27e6ce2929cf007eeea080f576...2612ac0135f794e620389ce4efdfde1d19e9a8f3#diff-37279d912b8bd686a5f683ec6b465f7db4799fb56029601266b2ffa6ffb35ccfR18

Can't build on linux

I'm trying to build Menu on my main production machine (Bedrock Linux) and here is what happens :
On an Oracle Linux stratum, which is my main one, the cmake works, but when I make it fails :

$ ~/src/Menu/build> LANG=C cmake ..
-- Configuring done
-- Generating done
-- Build files have been written to: /home/byjumperx4/src/Menu/build
$ ~/src/Menu/build> LANG=C make
[  4%] Automatic MOC for target volume
[  4%] Automatic MOC for target menubar
[  6%] Automatic MOC for target statusnotifier
[  9%] Automatic MOC for target datetime
[  9%] Built target statusnotifier_autogen
[  9%] Built target datetime_autogen
[  9%] Built target menubar_autogen
[  9%] Built target volume_autogen
[ 27%] Built target datetime
[ 27%] Built target volume
[ 47%] Built target statusnotifier
[ 52%] Building CXX object src/CMakeFiles/menubar.dir/appmenuwidget.cpp.o
[ 52%] Building CXX object src/CMakeFiles/menubar.dir/main.cpp.o
/home/byjumperx4/src/Menu/src/main.cpp: In member function 'virtual bool Application::notify(QObject*, QEvent*)':
/home/byjumperx4/src/Menu/src/main.cpp:36:16: error: invalid use of incomplete type 'class QDebug'
         qDebug() << "probono: e.type():" << e->type();
                ^
In file included from /usr/include/qt5/QtCore/qglobal.h:1206,
                 from /usr/include/qt5/QtGui/qtguiglobal.h:43,
                 from /usr/include/qt5/QtWidgets/qtwidgetsglobal.h:43,
                 from /usr/include/qt5/QtWidgets/qframe.h:43,
                 from /usr/include/qt5/QtWidgets/QFrame:1,
                 from /home/byjumperx4/src/Menu/src/mainwindow.h:23,
                 from /home/byjumperx4/src/Menu/src/main.cpp:20:
/usr/include/qt5/QtCore/qlogging.h:57:7: note: forward declaration of 'class QDebug'
 class QDebug;
       ^~~~~~
/home/byjumperx4/src/Menu/src/main.cpp:39:20: error: invalid use of incomplete type 'class QDebug'
             qDebug() << "probono: QApplication::focusWidget()->objectName():" << QApplication::focusWidget()->objectName();
                    ^
In file included from /usr/include/qt5/QtCore/qglobal.h:1206,
                 from /usr/include/qt5/QtGui/qtguiglobal.h:43,
                 from /usr/include/qt5/QtWidgets/qtwidgetsglobal.h:43,
                 from /usr/include/qt5/QtWidgets/qframe.h:43,
                 from /usr/include/qt5/QtWidgets/QFrame:1,
                 from /home/byjumperx4/src/Menu/src/mainwindow.h:23,
                 from /home/byjumperx4/src/Menu/src/main.cpp:20:
/usr/include/qt5/QtCore/qlogging.h:57:7: note: forward declaration of 'class QDebug'
 class QDebug;
       ^~~~~~
/home/byjumperx4/src/Menu/src/main.cpp:40:20: error: invalid use of incomplete type 'class QDebug'
             qDebug() << "probono: QApplication::focusWidget()->metaObject()->className():" << QApplication::focusWidget()->metaObject()->className();
                    ^
In file included from /usr/include/qt5/QtCore/qglobal.h:1206,
                 from /usr/include/qt5/QtGui/qtguiglobal.h:43,
                 from /usr/include/qt5/QtWidgets/qtwidgetsglobal.h:43,
                 from /usr/include/qt5/QtWidgets/qframe.h:43,
                 from /usr/include/qt5/QtWidgets/QFrame:1,
                 from /home/byjumperx4/src/Menu/src/mainwindow.h:23,
                 from /home/byjumperx4/src/Menu/src/main.cpp:20:
/usr/include/qt5/QtCore/qlogging.h:57:7: note: forward declaration of 'class QDebug'
 class QDebug;
       ^~~~~~
make[2]: *** [src/CMakeFiles/menubar.dir/build.make:72: src/CMakeFiles/menubar.dir/main.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
/home/byjumperx4/src/Menu/src/appmenuwidget.cpp: In member function 'void AppMenuWidget::actionAbout()':
/home/byjumperx4/src/Menu/src/appmenuwidget.cpp:737:12: error: 'sha' was not declared in this scope
         if(sha != "" && url != "" && build != "") {
            ^~~
/home/byjumperx4/src/Menu/src/appmenuwidget.cpp:737:12: note: suggested alternative: 'show'
         if(sha != "" && url != "" && build != "") {
            ^~~
            show
/home/byjumperx4/src/Menu/src/appmenuwidget.cpp:737:25: error: 'url' was not declared in this scope
         if(sha != "" && url != "" && build != "") {
                         ^~~
/home/byjumperx4/src/Menu/src/appmenuwidget.cpp:737:25: note: suggested alternative: 'QUrl'
         if(sha != "" && url != "" && build != "") {
                         ^~~
                         QUrl
/home/byjumperx4/src/Menu/src/appmenuwidget.cpp:737:38: error: 'build' was not declared in this scope
         if(sha != "" && url != "" && build != "") {
                                      ^~~~~
make[2]: *** [src/CMakeFiles/menubar.dir/build.make:163: src/CMakeFiles/menubar.dir/appmenuwidget.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:87: src/CMakeFiles/menubar.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
[ble: exit 2]
$ ~/src/Menu/build>

When I try to build from an Arch Linux strata with the dependencies that are on the README it won't event cmake:

$ ~/src/Menu/build> LANG=C strat arch cmake ..
-- The C compiler identification is GNU 10.2.0
-- The CXX compiler identification is GNU 10.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - failed
-- Check for working C compiler: /usr/sbin/cc
-- Check for working C compiler: /usr/sbin/cc - broken
CMake Error at /usr/share/cmake-3.19/Modules/CMakeTestCCompiler.cmake:66 (message):
  The C compiler

    "/usr/sbin/cc"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: /home/byjumperx4/src/Menu/build/CMakeFiles/CMakeTmp

    Run Build Command(s):/bedrock/cross/bin/gmake cmTC_46521/fast && /bedrock/cross/bin/gmake  -f CMakeFiles/cmTC_46521.dir/build.make CMakeFiles/cmTC_46521.dir/build
    gmake[1]: Entering directory '/home/byjumperx4/src/Menu/build/CMakeFiles/CMakeTmp'
    Building C object CMakeFiles/cmTC_46521.dir/testCCompiler.c.o
    /usr/sbin/cc    -o CMakeFiles/cmTC_46521.dir/testCCompiler.c.o -c /home/byjumperx4/src/Menu/build/CMakeFiles/CMakeTmp/testCCompiler.c
    gmake[1]: /usr/sbin/cc: Command not found
    gmake[1]: *** [CMakeFiles/cmTC_46521.dir/build.make:85: CMakeFiles/cmTC_46521.dir/testCCompiler.c.o] Error 127
    gmake[1]: Leaving directory '/home/byjumperx4/src/Menu/build/CMakeFiles/CMakeTmp'
    gmake: *** [Makefile:140: cmTC_46521/fast] Error 2





  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:3 (project)


-- Configuring incomplete, errors occurred!
See also "/home/byjumperx4/src/Menu/build/CMakeFiles/CMakeOutput.log".
See also "/home/byjumperx4/src/Menu/build/CMakeFiles/CMakeError.log".
[ble: exit 1]
$ ~/src/Menu/build>

Action Search does not contain actions from submenus

For Gtk applications, Action Search does not contain actions from submenus (e.g., in GIMP the filters are missing)

For Qt applications, Action Search does contain actions from submenus but not the full path is written.

Compare our Action Search (in the global menu) to the Action Search in Scribus (below):

image

Search text field gets not activated on each invocation of the menubar executable

Executing the menu a second time when an instance is already running should always set the Search text field active.
It does not do this. Sometimes one needs to execute it multiple times until the already-running menubar sets the Search text field active.

This seemingly does not do its job:

case QEvent::WindowActivate:
{
// Whenever this window becomes active, then set the focus on the search box
reinterpret_cast<QLineEdit *>(parent())->setFocus();
break;
}

Why?

[Idea] Make search field also function as an application launcher

At some point, we may have e.g., a SQLite database that contains all applications known to the system, their versions, which MIME types they can handle, etc.

It will not be based on the XDG standards, since that isn't really optimized for application bundles such as .AppDir, .app, .AppImage, etc.

Once we have that database, we can make it searchable from the existing search field too, so that it can also act as an application launcher.

Make VSCode work with the global menu

It seems to do "something" regarding the global menu but then it does not really work, and I don't know why yet:

loading "/usr/local/lib/gtk-3.0/modules/libappmenu-gtk-module.so"
/usr/local/lib/gtk-3.0/modules/libappmenu-gtk-module.so valid_hash_sysv 1 valid_hash_gnu 1 dynsymcount 122
  0x8107b0000 .. 0x8107bafff: /usr/local/lib/gtk-3.0/modules/libappmenu-gtk-module.so
 Searching for "libappmenu-gtk3-parser.so.0"
lm_find("/usr/local/lib/gtk-3.0/modules/libappmenu-gtk-module.so", "/usr/local/lib")
lmp_find("/usr/local/lib/gtk-3.0/modules/libappmenu-gtk-module.so")
  Trying "/usr/local/lib/libappmenu-gtk3-parser.so.0"
  Opened "/usr/local/lib/libappmenu-gtk3-parser.so.0", fd 33
loading "/usr/local/lib/libappmenu-gtk3-parser.so.0"
/usr/local/lib/libappmenu-gtk3-parser.so.0 valid_hash_sysv 1 valid_hash_gnu 1 dynsymcount 170
  0x8107bb000 .. 0x8107cefff: /usr/local/lib/libappmenu-gtk3-parser.so.0
relocating "/usr/local/lib/gtk-3.0/modules/libappmenu-gtk-module.so"
relocating "/usr/local/lib/libappmenu-gtk3-parser.so.0"
calling init function for /usr/local/lib/libappmenu-gtk3-parser.so.0 at 0x8107cb4e8
calling init function for /usr/local/lib/gtk-3.0/modules/libappmenu-gtk-module.so at 0x8107b6b38
"g_getenv" in "libappmenu-gtk-module.so" ==> 0x807c2ff30 in "libglib-2.0.so.0"
"gdk_display_get_default" in "libappmenu-gtk-module.so" ==> 0x80894c5c0 in "libgdk-3.so.0"
"gdk_x11_display_get_type" in "libappmenu-gtk-module.so" ==> 0x80897a4b0 in "libgdk-3.so.0"
"g_ascii_strcasecmp" in "libappmenu-gtk-module.so" ==> 0x807c69090 in "libglib-2.0.so.0"
"g_get_prgname" in "libappmenu-gtk-module.so" ==> 0x807c82b30 in "libglib-2.0.so.0"
"g_strcmp0" in "libappmenu-gtk-module.so" ==> 0x807c6da40 in "libglib-2.0.so.0"
"g_settings_new" in "libappmenu-gtk-module.so" ==> 0x807e77640 in "libgio-2.0.so.0"
"g_settings_get_value" in "libappmenu-gtk-module.so" ==> 0x807e77ae0 in "libgio-2.0.so.0"
"g_variant_type_checked_" in "libappmenu-gtk-module.so" ==> 0x807c95a00 in "libglib-2.0.so.0"
"g_variant_is_of_type" in "libappmenu-gtk-module.so" ==> 0x807c84730 in "libglib-2.0.so.0"
"g_main_context_push_thread_default" in "libdconfsettings.so" ==> 0x807c43dd0 in "libglib-2.0.so.0""g_variant_iter_init" in "libappmenu-gtk-module.so" ==> 0x807c85eb0 in "libglib-2.0.so.0"
reloc_jmpslot: *0x8111cd3f8 = 0x807c43dd0"g_variant_iter_loop" in "libappmenu-gtk-module.so" ==> 0x807c8bfe0 in "libglib-2.0.so.0"
"g_object_unref" in "libappmenu-gtk-module.so" ==> 0x807cd0e60 in "libgobject-2.0.so.0"
"g_variant_unref" in "libappmenu-gtk-module.so" ==> 0x807c8d270 in "libglib-2.0.so.0"
"g_bus_get_sync" in "libappmenu-gtk-module.so" ==> 0x807e8b690 in "libgio-2.0.so.0"
"g_dbus_connection_call_sync" in "libappmenu-gtk-module.so" ==> 0x807e8abd0 in "libgio-2.0.so.0"
"g_variant_get_child_value" in "libappmenu-gtk-module.so" ==> 0x807c8d900 in "libglib-2.0.so.0"
"g_variant_get" in "libappmenu-gtk-module.so" ==> 0x807c8b430 in "libglib-2.0.so.0"
"g_str_equal" in "libappmenu-gtk-module.so" ==> 0x807c35d80 in "libglib-2.0.so.0"
"g_variant_iter_free" in "libappmenu-gtk-module.so" ==> 0x807c88940 in "libglib-2.0.so.0"
"gtk_settings_get_default" in "libappmenu-gtk-module.so" ==> 0x80906a690 in "libgtk-3.so.0"
"gtk_settings_get_type" in "libappmenu-gtk-module.so" ==> 0x809069ec0 in "libgtk-3.so.0"
"g_object_class_find_property" in "libappmenu-gtk-module.so" ==> 0x807cd08b0 in "libgobject-2.0.so.0"
"g_type_check_instance_is_fundamentally_a" in "libappmenu-gtk-module.so" ==> 0x807ce9300 in "libgobject-2.0.so.0"
"g_settings_get_boolean" in "libappmenu-gtk-module.so" ==> 0x807e78f40 in "libgio-2.0.so.0"
"g_object_set" in "libappmenu-gtk-module.so" ==> 0x807cd33e0 in "libgobject-2.0.so.0"
"g_bus_watch_name" in "libappmenu-gtk-module.so" ==> 0x807e99180 in "libgio-2.0.so.0"
"unity_gtk_menu_shell_set_debug" in "libappmenu-gtk-module.so" ==> 0x8107c7100 in "libappmenu-gtk3-parser.so.0"
"unity_gtk_action_group_set_debug" in "libappmenu-gtk-module.so" ==> 0x8107c35f0 in "libappmenu-gtk3-parser.so.0""g_private_set" in "libgio-2.0.so.0" ==> 0x807c9be30 in "libglib-2.0.so.0"
"gtk_widget_get_type" in "libappmenu-gtk-module.so" ==> 0x80912f1b0 in "libgtk-3.so.0"
"g_type_class_ref" in "libappmenu-gtk-module.so" ==> 0x807ce4a30 in "libgobject-2.0.so.0"
"gtk_application_window_get_type" in "libappmenu-gtk-module.so" ==> 0x808e8e130 in "libgtk-3.so.0"
"gtk_window_get_type" in "libappmenu-gtk-module.so" ==> 0x809148c20 in "libgtk-3.so.0"
"g_type_children" in "libappmenu-gtk-module.so" ==> 0x807ce8990 in "libgobject-2.0.so.0"
"g_free" in "libappmenu-gtk-module.so" ==> 0x807c4ec20 in "libglib-2.0.so.0"
"gtk_menu_bar_get_type" in "libappmenu-gtk-module.so" ==> 0x808fdf830 in "libgtk-3.so.0"
"gtk_widget_get_screen" in "libappmenu-gtk-module.so" ==> 0x8091373e0 in "libgtk-3.so.0"
"gdk_screen_get_rgba_visual" in "libappmenu-gtk-module.so" ==> 0x80895bbd0 in "libgdk-3.so.0"
"g_type_check_instance_cast" in "libappmenu-gtk-module.so" ==> 0x807ce9410 in "libgobject-2.0.so.0"
"gtk_window_get_type_hint" in "libappmenu-gtk-module.so" ==> 0x80914b7c0 in "libgtk-3.so.0"
"gdk_wayland_display_get_type" in "libappmenu-gtk-module.so" ==> 0x8089adc10 in "libgdk-3.so.0"
"g_type_check_instance_is_a" in "libappmenu-gtk-module.so" ==> 0x807ce9180 in "libgobject-2.0.so.0"
"g_quark_from_static_string" in "libappmenu-gtk-module.so" ==> 0x807c58100 in "libglib-2.0.so.0"
"g_object_get_qdata" in "libappmenu-gtk-module.so" ==> 0x807cd4940 in "libgobject-2.0.so.0"
"g_strdup_printf" in "libappmenu-gtk-module.so" ==> 0x807c68360 in "libglib-2.0.so.0"
"gtk_widget_get_window" in "libappmenu-gtk-module.so" ==> 0x809141090 in "libgtk-3.so.0"
"gdk_window_get_display" in "libappmenu-gtk-module.so" ==> 0x80895f630 in "libgdk-3.so.0"
"gdk_x11_display_get_xdisplay" in "libappmenu-gtk-module.so" ==> 0x80897bb50 in "libgdk-3.so.0"
"gdk_x11_window_get_xid" in "libappmenu-gtk-module.so" ==> 0x808993450 in "libgdk-3.so.0"
"gdk_x11_get_xatom_by_name_for_display" in "libappmenu-gtk-module.so" ==> 0x80898a890 in "libgdk-3.so.0"
"XGetWindowProperty" in "libappmenu-gtk-module.so" ==> 0x807f8d340 in "libX11.so.6"
"g_slice_alloc" in "libappmenu-gtk-module.so" ==> 0x807c65930 in "libglib-2.0.so.0"
"g_menu_new" in "libappmenu-gtk-module.so" ==> 0x807e69af0 in "libgio-2.0.so.0"
"g_action_group_get_type" in "libappmenu-gtk-module.so" ==> 0x807e61d10 in "libgio-2.0.so.0"
"unity_gtk_action_group_new" in "libappmenu-gtk-module.so" ==> 0x8107c2170 in "libappmenu-gtk3-parser.so.0"
"g_once_init_enter" in "libappmenu-gtk3-parser.so.0" ==> 0x807c72070 in "libglib-2.0.so.0"
"g_intern_static_string" in "libappmenu-gtk3-parser.so.0" ==> 0x807c58270 in "libglib-2.0.so.0"
"g_type_register_static_simple" in "libappmenu-gtk3-parser.so.0" ==> 0x807ce6660 in "libgobject-2.0.so.0"
"g_action_group_get_type" in "libappmenu-gtk3-parser.so.0" ==> 0x807e61d10 in "libgio-2.0.so.0"
"g_type_add_interface_static" in "libappmenu-gtk3-parser.so.0" ==> 0x807ce7000 in "libgobject-2.0.so.0"
"g_once_init_leave" in "libappmenu-gtk3-parser.so.0" ==> 0x807c72120 in "libglib-2.0.so.0"
"g_object_new" in "libappmenu-gtk3-parser.so.0" ==> 0x807cd17a0 in "libgobject-2.0.so.0"
"g_type_class_peek_parent" in "libappmenu-gtk3-parser.so.0" ==> 0x807ce7f60 in "libgobject-2.0.so.0"
"g_type_check_class_cast" in "libappmenu-gtk3-parser.so.0" ==> 0x807ce9710 in "libgobject-2.0.so.0"
"g_hash_table_new_full" in "libappmenu-gtk3-parser.so.0" ==> 0x807c33580 in "libglib-2.0.so.0"
"g_menu_model_get_type" in "libappmenu-gtk-module.so" ==> 0x807e68740 in "libgio-2.0.so.0"
"g_dbus_connection_export_menu_model" in "libappmenu-gtk-module.so" ==> 0x807e6b350 in "libgio-2.0.so.0"
"g_dbus_connection_export_action_group" in "libappmenu-gtk-module.so" ==> 0x807e642f0 in "libgio-2.0.so.0"
"g_dbus_connection_get_unique_name" in "libappmenu-gtk-module.so" ==> 0x807e884d0 in "libgio-2.0.so.0"
"g_utf8_strlen" in "libappmenu-gtk-module.so" ==> 0x807c7ad50 in "libglib-2.0.so.0"
"XChangeProperty" in "libappmenu-gtk-module.so" ==> 0x807f83530 in "libX11.so.6"
"g_object_set_qdata_full" in "libappmenu-gtk-module.so" ==> 0x807cd4b50 in "libgobject-2.0.so.0"
"g_log" in "libappmenu-gtk-module.so" ==> 0x807c4f520 in "libglib-2.0.so.0"
 Searching for "libdbusmenu-glib.so"
relocating "/usr/local/lib/libXau.so.6"  Trying "/usr/local/share/code-oss/libdbusmenu-glib.so"
relocating "/usr/local/lib/libXdmcp.so.6"  Failed to open "/usr/local/share/code-oss/libdbusmenu-glib.so": No such file or directory
search_library_pathfds('libdbusmenu-glib.so', '(null)', fdp)
  Trying "/lib/libdbusmenu-glib.so"
  Failed to open "/lib/libdbusmenu-glib.so": No such file or directory
  Trying "/usr/lib/libdbusmenu-glib.so"
  Failed to open "/usr/lib/libdbusmenu-glib.so": No such file or directory
  Trying "/usr/lib/compat/libdbusmenu-glib.so"
  Failed to open "/usr/lib/compat/libdbusmenu-glib.so": No such file or directory
  Trying "/usr/local/lib/libdbusmenu-glib.so"
  Opened "/usr/local/lib/libdbusmenu-glib.so", fd 58
loading "/usr/local/lib/libdbusmenu-glib.so"
/usr/local/lib/libdbusmenu-glib.so valid_hash_sysv 1 valid_hash_gnu 1 dynsymcount 278relocating "/usr/local/lib/libwayland-client.so.0"
  0x818169000 .. 0x818189fff: /usr/local/lib/libdbusmenu-glib.so
relocating "/usr/local/lib/libdbusmenu-glib.so"
calling init function for /usr/local/lib/libdbusmenu-glib.so at 0x818185458
"g_once_init_enter" in "libdbusmenu-glib.so" ==> 0x807c72070 in "libglib-2.0.so.0"
"g_intern_static_string" in "libdbusmenu-glib.so" ==> 0x807c58270 in "libglib-2.0.so.0"
"g_type_register_static_simple" in "libdbusmenu-glib.so" ==> 0x807ce6660 in "libgobject-2.0.so.0"
"g_once_init_leave" in "libdbusmenu-glib.so" ==> 0x807c72120 in "libglib-2.0.so.0"
"g_object_new" in "libdbusmenu-glib.so" ==> 0x807cd17a0 in "libgobject-2.0.so.0"
"g_type_class_peek_parent" in "libdbusmenu-glib.so" ==> 0x807ce7f60 in "libgobject-2.0.so.0"
"g_type_check_class_cast" in "libdbusmenu-glib.so" ==> 0x807ce9710 in "libgobject-2.0.so.0"
"g_type_class_add_private" in "libdbusmenu-glib.so" ==> 0x807cea4b0 in "libgobject-2.0.so.0"
"g_signal_new" in "libdbusmenu-glib.so" ==> 0x807cdc090 in "libgobject-2.0.so.0"
"g_param_spec_string" in "libdbusmenu-glib.so" ==> 0x807cda850 in "libgobject-2.0.so.0"
"g_object_class_install_property" in "libdbusmenu-glib.so" ==> 0x807cd0370 in "libgobject-2.0.so.0"
"dbusmenu_menuitem_get_type" in "libdbusmenu-glib.so" ==> 0x818175c90 in "libdbusmenu-glib.so"
"g_param_spec_object" in "libdbusmenu-glib.so" ==> 0x807cdaaf0 in "libgobject-2.0.so.0"
"g_param_spec_uint" in "libdbusmenu-glib.so" ==> 0x807cda2c0 in "libgobject-2.0.so.0"
"dbusmenu_text_direction_get_type" in "libdbusmenu-glib.so" ==> 0x818175990 in "libdbusmenu-glib.so"
"g_enum_register_static" in "libdbusmenu-glib.so" ==> 0x807ccd600 in "libgobject-2.0.so.0"
"g_param_spec_enum" in "libdbusmenu-glib.so" ==> 0x807cda580 in "libgobject-2.0.so.0"
"dbusmenu_status_get_type" in "libdbusmenu-glib.so" ==> 0x818175b10 in "libdbusmenu-glib.so"
"g_dbus_node_info_new_for_xml" in "libdbusmenu-glib.so" ==> 0x807ea22b0 in "libgio-2.0.so.0"
"g_dbus_node_info_lookup_interface" in "libdbusmenu-glib.so" ==> 0x807ea3ca0 in "libgio-2.0.so.0"
"g_type_instance_get_private" in "libdbusmenu-glib.so" ==> 0x807ceaa40 in "libgobject-2.0.so.0"
"g_type_check_instance_cast" in "libdbusmenu-glib.so" ==> 0x807ce9410 in "libgobject-2.0.so.0"
"g_hash_table_new_full" in "libdbusmenu-glib.so" ==> 0x807c33580 in "libglib-2.0.so.0"
"g_getenv" in "libdbusmenu-glib.so" ==> 0x807c2ff30 in "libglib-2.0.so.0"
"g_dpgettext" in "libdbusmenu-glib.so" ==> 0x807c331c0 in "libglib-2.0.so.0"
"g_strcmp0" in "libdbusmenu-glib.so" ==> 0x807c6da40 in "libglib-2.0.so.0"
"g_value_dup_string" in "libdbusmenu-glib.so" ==> 0x807cf1c80 in "libgobject-2.0.so.0"
"g_cancellable_new" in "libdbusmenu-glib.so" ==> 0x807dceb60 in "libgio-2.0.so.0"
"g_object_ref" in "libdbusmenu-glib.so" ==> 0x807cd0d60 in "libgobject-2.0.so.0"
"g_bus_get" in "libdbusmenu-glib.so" ==> 0x807e8b840 in "libgio-2.0.so.0"
"g_param_spec_int" in "libdbusmenu-glib.so" ==> 0x807cda240 in "libgobject-2.0.so.0"
"g_value_type_transformable" in "libdbusmenu-glib.so" ==> 0x807cee410 in "libgobject-2.0.so.0"
"g_value_register_transform_func" in "libdbusmenu-glib.so" ==> 0x807cee160 in "libgobject-2.0.so.0"
"dbusmenu_defaults_ref_default" in "libdbusmenu-glib.so" ==> 0x818175120 in "libdbusmenu-glib.so"
"g_variant_new_boolean" in "libdbusmenu-glib.so" ==> 0x807c84630 in "libglib-2.0.so.0"
"dbusmenu_defaults_default_set" in "libdbusmenu-glib.so" ==> 0x818175200 in "libdbusmenu-glib.so"
"g_hash_table_lookup" in "libdbusmenu-glib.so" ==> 0x807c34280 in "libglib-2.0.so.0"
"g_strdup" in "libdbusmenu-glib.so" ==> 0x807c68190 in "libglib-2.0.so.0"
"g_malloc0" in "libdbusmenu-glib.so" ==> 0x807c4eb60 in "libglib-2.0.so.0"
"g_variant_type_copy" in "libdbusmenu-glib.so" ==> 0x807c957a0 in "libglib-2.0.so.0"
"g_variant_ref_sink" in "libdbusmenu-glib.so" ==> 0x807c8d410 in "libglib-2.0.so.0"
"g_hash_table_insert" in "libdbusmenu-glib.so" ==> 0x807c345d0 in "libglib-2.0.so.0"
"g_hash_table_replace" in "libdbusmenu-glib.so" ==> 0x807c34750 in "libglib-2.0.so.0"
"g_dgettext" in "libdbusmenu-glib.so" ==> 0x807c33100 in "libglib-2.0.so.0"
"g_variant_new_string" in "libdbusmenu-glib.so" ==> 0x807c864d0 in "libglib-2.0.so.0"
"g_variant_type_checked_" in "libdbusmenu-glib.so" ==> 0x807c95a00 in "libglib-2.0.so.0"
"g_object_add_weak_pointer" in "libdbusmenu-glib.so" ==> 0x807cd4450 in "libgobject-2.0.so.0"
"g_value_get_int" in "libdbusmenu-glib.so" ==> 0x807cf14f0 in "libgobject-2.0.so.0"
"dbusmenu_menuitem_property_set_variant" in "libdbusmenu-glib.so" ==> 0x8181778e0 in "libdbusmenu-glib.so"
"g_utf8_validate" in "libdbusmenu-glib.so" ==> 0x807c7d0b0 in "libglib-2.0.so.0"
"dbusmenu_defaults_default_get_type" in "libdbusmenu-glib.so" ==> 0x818175540 in "libdbusmenu-glib.so"
"g_variant_is_of_type" in "libdbusmenu-glib.so" ==> 0x807c84730 in "libglib-2.0.so.0"
"dbusmenu_defaults_default_get" in "libdbusmenu-glib.so" ==> 0x818175460 in "libdbusmenu-glib.so"
"g_variant_equal" in "libdbusmenu-glib.so" ==> 0x807c88420 in "libglib-2.0.so.0"
"g_hash_table_lookup_extended" in "libdbusmenu-glib.so" ==> 0x807c343f0 in "libglib-2.0.so.0"
"g_signal_emit" in "libdbusmenu-glib.so" ==> 0x807ce2a90 in "libgobject-2.0.so.0"
"g_variant_new" in "libdbusmenu-glib.so" ==> 0x807c8a9d0 in "libglib-2.0.so.0"
"g_variant_unref" in "libdbusmenu-glib.so" ==> 0x807c8d270 in "libglib-2.0.so.0"
"g_list_find" in "libdbusmenu-glib.so" ==> 0x807c42c80 in "libglib-2.0.so.0"
"dbusmenu_menuitem_set_parent" in "libdbusmenu-glib.so" ==> 0x818176930 in "libdbusmenu-glib.so"
"dbusmenu_menuitem_property_exist" in "libdbusmenu-glib.so" ==> 0x818176aa0 in "libdbusmenu-glib.so"
"g_list_append" in "libdbusmenu-glib.so" ==> 0x807c42330 in "libglib-2.0.so.0"
"g_list_length" in "libdbusmenu-glib.so" ==> 0x807c42db0 in "libglib-2.0.so.0"
"g_value_init" in "libdbusmenu-glib.so" ==> 0x807ced8a0 in "libgobject-2.0.so.0"
"g_value_set_object" in "libdbusmenu-glib.so" ==> 0x807cd4fa0 in "libgobject-2.0.so.0"
"g_object_set_property" in "libdbusmenu-glib.so" ==> 0x807cd35c0 in "libgobject-2.0.so.0"
"g_value_get_object" in "libdbusmenu-glib.so" ==> 0x807cd5160 in "libgobject-2.0.so.0"
"dbusmenu_menuitem_get_id" in "libdbusmenu-glib.so" ==> 0x818175dd0 in "libdbusmenu-glib.so"
"g_object_get_property" in "libdbusmenu-glib.so" ==> 0x807cd3610 in "libgobject-2.0.so.0"
"dbusmenu_menuitem_get_root" in "libdbusmenu-glib.so" ==> 0x8181777b0 in "libdbusmenu-glib.so"
"g_value_set_int" in "libdbusmenu-glib.so" ==> 0x807cf14a0 in "libgobject-2.0.so.0"
"dbusmenu_menuitem_get_children" in "libdbusmenu-glib.so" ==> 0x8181760d0 in "libdbusmenu-glib.so"
"dbusmenu_menuitem_set_root" in "libdbusmenu-glib.so" ==> 0x818178600 in "libdbusmenu-glib.so"
"dbusmenu_menuitem_foreach" in "libdbusmenu-glib.so" ==> 0x818178970 in "libdbusmenu-glib.so"
"g_signal_connect_data" in "libdbusmenu-glib.so" ==> 0x807cdf190 in "libgobject-2.0.so.0"
"g_list_foreach" in "libdbusmenu-glib.so" ==> 0x807c422f0 in "libglib-2.0.so.0"
"dbusmenu_menuitem_properties_list" in "libdbusmenu-glib.so" ==> 0x818178150 in "libdbusmenu-glib.so"
"g_hash_table_get_keys" in "libdbusmenu-glib.so" ==> 0x807c35b90 in "libglib-2.0.so.0"
"dbusmenu_menuitem_property_get_variant" in "libdbusmenu-glib.so" ==> 0x818177dd0 in "libdbusmenu-glib.so"
"g_array_new" in "libdbusmenu-glib.so" ==> 0x807c0fce0 in "libglib-2.0.so.0"
"g_array_append_vals" in "libdbusmenu-glib.so" ==> 0x807c10100 in "libglib-2.0.so.0"
"dbusmenu_menuitem_property_is_default" in "libdbusmenu-glib.so" ==> 0x818178df0 in "libdbusmenu-glib.so"
"g_idle_add" in "libdbusmenu-glib.so" ==> 0x807c492d0 in "libglib-2.0.so.0"
"g_list_free" in "libdbusmenu-glib.so" ==> 0x807c42260 in "libglib-2.0.so.0"
"g_object_unref" in "libdbusmenu-glib.so" ==> 0x807cd0e60 in "libgobject-2.0.so.0"
"g_signal_handlers_disconnect_matched" in "libdbusmenu-glib.so" ==> 0x807ce0790 in "libgobject-2.0.so.0"  Failed to open "/usr/local/share/code-oss/libcxxrt.so.1": No such file or directory
/lib/libcxxrt.so.1 valid_hash_sysv 1 valid_hash_gnu 1 dynsymcount 374"g_hash_table_remove" in "libdbusmenu-glib.so" ==> 0x807c34ba0 in "libglib-2.0.so.0"
"g_bus_get_finish" in "libdbusmenu-glib.so" ==> 0x807e8ba00 in "libgio-2.0.so.0"
"g_dbus_connection_signal_subscribe" in "libdbusmenu-glib.so" ==> 0x807e889b0 in "libgio-2.0.so.0"
lm_find("/usr/local/lib/libGL.so.1", "/usr/local/lib")"g_dbus_connection_register_object" in "libdbusmenu-glib.so" ==> 0x807e89510 in "libgio-2.0.so.0"
"g_dbus_connection_emit_signal" in "libdbusmenu-glib.so" ==> 0x807e8a360 in "libgio-2.0.so.0"
"dbusmenu_menuitem_exposed" in "libdbusmenu-glib.so" ==> 0x818178ed0 in "libdbusmenu-glib.so"lmp_find("$DEFAULT$")
"g_variant_parse" in "libdbusmenu-glib.so" ==> 0x807c8def0 in "libglib-2.0.so.0"
  Failed to open "/lib/libxcb-dri3.so.0": No such file or directory"g_free" in "libdbusmenu-glib.so" ==> 0x807c4ec20 in "libglib-2.0.so.0"
lmp_find("/usr/local/lib/libGL.so.1")"g_object_remove_weak_pointer" in "libdbusmenu-glib.so" ==> 0x807cd44c0 in "libgobject-2.0.so.0"
"g_hash_table_destroy" in "libdbusmenu-glib.so" ==> 0x807c341d0 in "libglib-2.0.so.0"
"g_array_free" in "libdbusmenu-glib.so" ==> 0x807c10020 in "libglib-2.0.so.0"lmp_find("$DEFAULT$")
"g_dbus_connection_unregister_object" in "libdbusmenu-glib.so" ==> 0x807e89890 in "libgio-2.0.so.0"
"g_dbus_connection_signal_unsubscribe" in "libdbusmenu-glib.so" ==> 0x807e89050 in "libgio-2.0.so.0"
"g_cancellable_is_cancelled" in "libdbusmenu-glib.so" ==> 0x807dcedb0 in "libgio-2.0.so.0"
"g_cancellable_cancel" in "libdbusmenu-glib.so" ==> 0x807dcf0c0 in "libgio-2.0.so.0"
"g_variant_type_free" in "libdbusmenu-glib.so" ==> 0x807c95790 in "libglib-2.0.so.0"
calling fini function for /usr/local/lib/libdbusmenu-glib.so at 0x81818546c
"__cxa_finalize" in "libdbusmenu-glib.so" ==> 0x80bea3040 in "libc.so.7"
calling fini function for /usr/local/lib/gtk-3.0/modules/libappmenu-gtk-module.so at 0x8107b6b4c
"__cxa_finalize" in "libappmenu-gtk-module.so" ==> 0x80bea3040 in "libc.so.7"
calling fini function for /usr/local/lib/libappmenu-gtk3-parser.so.0 at 0x8107cb4fc
"__cxa_finalize" in "libappmenu-gtk3-parser.so.0" ==> 0x80bea3040 in "libc.so.7"

Related to #29?

Reference: helloSystem/hello#116

Make menu Zeroconf-aware

RIght now we display various applications in the menu. Wouldn't it be nice if we could also show for each application's menu entry a submenu with services announced on the network that can be used with this application? E.g., the Printer application would show all printers in a submenu, the Terminal application would show all servers reachable on the LAN via SSH in a submenu, the Browser appliaction would show all websites on the LAN in a submenu, and so on.

This should also automatically make the network services available from Action Search...
and remove the need for a separate Zeroconf chooser utility like the one we currently have:

image

Instead, the "Chromium" menu entry would get submenus for http://Asterisk.local.:8088 etc.

image

We could then also type aster... into the Action Search box and would get a result that would open http://Asterisk.local.:8088 with Chrome (and each other browser installed):

image

For this to work, each application would have to specify which Zeroconf services it can handle and for how to invoke the application using the arguments provided by Zeroconf.

Consider adding a menu item to list running programs

In the old system 7 the running programs were listed in a menu item at the far right which when clicked displayed a list of all running programs.
image

The dock takes too much space and the titles of the running programs are hidden unless the user hovers the cursor over the item.

Like the picture in System 7.0 section here: https://guidebookgallery.org/screenshots/running

I propose to improve this design by having an option to always display this menu item opened as a column at the right most of the screen (to use the right scree border limit).
And when set to always be on screen it would become like BeOs here: https://guidebookgallery.org/screenshots/running
image

Accessibility: keyboard navigation of push buttons

In, for example, the Shut Down dialogue:

  • keying Shift-Tab (or Left?) three times should reach the Restart button.

It does not, because the first Shift-Tab reaches the Shut Down button.

For predictability and consistency, it should be possible to begin navigating away from a default button with a single keystroke.

Compare with, for example, behaviours after keyboard-initiated presentation of a leaving dialogue with x11/sddm:

2021-01-25_02.33.21.mp4

Style Action Search completer popup QListView more like QMenu

Style Action Search completer popup QListView more like QMenu.

Especially

  • The height of each result line should be more like the height of each QMenu entry
  • The location of the Action Search completer popup QListView is a few pixels too high compared to a QMenu

Unfortunately I could not find any way to fix this.

image

Automatically update the System menu using QFileSystemWatcher

The System menu now gets populated based on the filesystem structure on disk.
E.g., you put an app into /Applications and it will show up in the menu.

Currently one has to restart the menu for changes to take effect.

Hence we should find a way to automatically update the System menu using QFileSystemWatcher whenever something changes in the directories that are put in the System menu:

image

Menu for some Gtk applications appears only after switching to another one and back

Plasma 5.19.4 has introduced a bug in the Plasma global menu widget itself, which will not show the global menu for GTK applications unless you switch to a KDE/Qt application first and then back to the GTK application.

The bug has been reported to the KDE developers upstream, so they know about it.

Test case: Inkscape.

Are we suffering from the same bug?

Has it since been resolved in KDE Plasma?

Accessibility: Search menu responses to keyboard input

Example A

  1. boot from hello-0.3.0_0C160-FreeBSD-12.1-amd64.iso
  2. type rest
  3. observe selection of every character that was typed
  4. key Down

Expected:

  1. selection of System → Restart

Actual result:

  1. selection bounces away from the required action
  2. up to the Search field, with the entire phrase selected

Workaround:

  1. key Left does move the selection down, however this is wrong because at step (3) above there should be a text cursor

– key Left should move the vertical line one step to the left, to between the characters s and t

Also show other search results than just the menu items

E.g., combine it with something like DSBExec (the thing that coms up when you press Alt-F2) for application launcher functionality:

image

This way, the same search box that we are currently using for the Action Search ("Search in Menu") could also be used as an application launcher.

Is this possible in principle? Wdyt @antony-jr?

QCompleter: Automatically select the first search result

Automatically select the first search result once there is only one result left, so that one can just press Enter.

How it is right now:

image

How it should be:

image

https://stackoverflow.com/q/17782277 did not work for me so far:

Menu/src/appmenuwidget.cpp

Lines 177 to 180 in aaf8427

// Set first result active; https://stackoverflow.com/q/17782277. FIXME: This does not work yet. Why?
QItemSelectionModel* sm = new QItemSelectionModel(actionCompleter->completionModel());
actionCompleter->popup()->setSelectionModel(sm);
sm->select(actionCompleter->completionModel()->index(0,0), QItemSelectionModel::Select | QItemSelectionModel::Rows);

Menu doesn't fill the screen when using a secondary display in portrait (90 deg rotated)

When using a secondary display in portrait the menu doesn't fit.
But if I disable the primary display to use only one display in portrait and restart the menu it fills the screen's top correctly.

Expected result on the portrait display when using 2 displays:
1613146855
Actual result:
1613146652

Steps to reproduce:

  1. Plug in an external display.
  2. rotate it and set it to portrait mode in the Screen Settings (screen layout editor)
  3. You should see something like on the screenshots.

Handle multi-monitor setups better

Traditionally, the Mac has shown he menu bar only on the main display.
Recent versions seem to show the same menu bar on all desktops.

Accessibility: the Search menu cursor and user input lack visibility/legibility

I used the Search menu countless times, and looked for a cursor, but did not see it.

#44 (comment):

I do have a cursor here and it even blinks...

Here, on at least one real computer: no cursor.

2021-01-11.07.43.mp4

On computers where the cursor is visible: it's barely visible (if I hadn't been told of its existence, I would not have seen it). YMMV, if you're younger with better eyesight and so on.

White text input on a vivid blue background is not great. I reckon, if this can be fixed – to have black text on a white (or off-white) background – then a cursor, when it is visible, will be more clearly visible.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.