Giter Site home page Giter Site logo

qmpanel's Introduction

qmpanel - A Minimal Qt-Based Desktop Panel

screenshot

What is this?

  • A standalone desktop panel with a simple, traditional design
  • Lightly customizable, but with a "Just Works" mentality
  • Originally a fork of lxqt-panel

Features

  • Searchable applications menu
  • Configurable quick-launch toolbar
  • Taskbar (showing running applications)
  • Status icon area ("system tray")
  • Date & time display with pop-up calendar

Where to use qmpanel

Currently, qmpanel works best under X11, for example with Openbox. It can also be used in labwc (with a few patches) via XWayland.

Native Wayland support is experimental (see issue #7).

Getting qmpanel

In Arch Linux, qmpanel is available via the AUR. On other systems, you can clone the repository and compile from source.

First ensure you have the required dependencies installed:

  • Qt 6.5+
  • GLib 2.32+
  • KWindowSystem 6.0+
  • LayerShellQt 6.0+
  • meson (build dependency)
  • a C++ compiler (such as GCC)

To build, run meson setup build && meson compile -C build.

Then simply run ./build/qmpanel. No installation is necessary.

Configuration (optional)

For default settings, you can run qmpanel with no configuration at all.

To customize it, first create the file $HOME/.config/qmpanel.ini. The file contents should match the following format:

[Settings]
# Sets the icon displayed for the applications menu
MenuIcon=<icon-name>
# Pins favorite applications to the top of the menu
PinnedMenuApps=<app-name>.desktop;<app-name>.desktop
# Adds applications to the quick-launch toolbar
QuickLaunchApps=<app-name>.desktop;<app-name>.desktop
# Runs commands (e.g. system tray icons) at startup
LaunchCmds=<command>;<command>

All lines except the first ([Settings]) are optional.

Design philosophy

  • Stay small, value correctness above features
  • Work "out of the box" with minimal configuration
  • Depend only on widely-used libraries (GLib, Qt, KWindowSystem)

Potential future development

  • Better native Wayland support
  • Upstream libdbusmenu-qt changes (or find a replacement)
  • Non-English translations

Features not planned:

  • Plugins/extensions
  • Custom colors/themes (beyond the Qt theme)
  • Custom panel layouts or multiple panels
  • Grouping/ordering of taskbar buttons

Version history

0.1 (8 May 2020)

  • Initial release

0.2 (2 Oct 2023)

  • Build system changed from CMake to meson
  • System tray changed from XEmbed to StatusNotifierItem
  • New LaunchCmds feature to start system tray icons
  • Several bug fixes (refer to commit log)

0.3 (21 Dec 2023)

  • Several bug fixes to StatusNotifierItem system tray
  • Work around multi-monitor issues under XWayland

0.4 (25 Mar 2024)

  • Port to Qt 6 and KWindowSystem 6
  • Experimental native Wayland support using LayerShellQt

qmpanel's People

Contributors

agaida avatar amoskvin avatar atalanttore avatar ayhanyalcinsoy avatar dglent avatar helixbot avatar jlindgren90 avatar jubalh avatar kuzmas avatar luis-pereira avatar mbouzada avatar micrococo avatar nebulade avatar p-bo avatar paiiou avatar palinek avatar paulolieuthier avatar pcman avatar pjotr123 avatar pvanek avatar rbuj avatar safaalfulaij avatar scootergrisen avatar smarquespt avatar sokoloffa avatar stefonarch avatar thomasvie avatar tsimonq2 avatar welaq avatar yarons avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

qmpanel's Issues

Add advance documentation / wiki.

Hello, I found your panel yesterday and just tried it today. It's great, is there any documentation / wiki I could follow or any complete example config ? Thanks.

Calendar pops up as normal window if panel has no focus before

  1. Click on the panel, click clock โ†’ calendar opens beneath clock (with bottom panel at screen border as any other popup too - which is another issue also with lxqt-panel)
  2. Focus any other app, click clock โ†’ calendar opens as normal window at center screen with decorations.

Systray icons missing/not displayed

Items are present, tooltips and right click is working and space is reserved but many icons are invisible. Not found/not displayed here are:
Element-desktop, meteo-qt, lxqt-powermanagement, copyQ, cmst, strawberry

Working: telegram,feathernotes, redshift/gammastep, lxqt-notificationd, qbittorrent

Segmentation fault on pure wayland environment.

Allow me to report that qmpanel seems still get segfault on wayland (x11 is fine). I'm trying it on some wayland compositors and get same result. It suspicious since the compilation.

WARNING: CMake: Dependency Qt5::X11Extras for KF5WindowSystem was not found
Run-time dependency kf5windowsystem found: YES 5.112.0

But the compilation is done successfully.

When I run the qmpanel I got this :

[qmpanel]$ QT_QPA_PLATFORM=wayland b/qmpanel
kf.windowsystem: Could not find any platform plugin
Segmentation fault

Any clue to fix it ? Thanks

segfault on wayland

Stumpled upon this only now, but it doesn't start on wayland at all here:

 Message: Process 70133 (qmpanel) of user 1000 dumped core.
                
                Stack trace of thread 70133:
                #0  0x00007f6fccf88dcf n/a (libX11.so.6 + 0x2cdcf)
                #1  0x00007f6fccf8931e XInternAtom (libX11.so.6 + 0x2d31e)
                #2  0x000055e46dd6ffe8 _ZN7SysTrayC2EP7QWidget (qmpanel + 0x1cfe8)
                #3  0x000055e46dd6ca30 _ZN9MainPanelC2ER9Resources (qmpanel + 0x19a30)
                #4  0x000055e46dd68bb6 main (qmpanel + 0x15bb6)
                #5  0x00007f6fcb03c790 n/a (libc.so.6 + 0x23790)
                #6  0x00007f6fcb03c84a __libc_start_main (libc.so.6 + 0x2384a)
                #7  0x000055e46dd68c85 _start (qmpanel + 0x15c85)
                
                Stack trace of thread 70134:
                #0  0x00007f6fcb1139df __poll (libc.so.6 + 0xfa9df)
                #1  0x00007f6fccc6dc2f n/a (libglib-2.0.so.0 + 0xacc2f)
                #2  0x00007f6fccc150e2 g_main_context_iteration (libglib-2.0.so.0 + 0x540e2)
                #3  0x00007f6fcb8d8c6c _ZN20QEventDispatcherGlib13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE (libQt5Core.so.5 + 0x2d8c6c)
                #4  0x00007f6fcb8866ec _ZN10QEventLoop4execE6QFlagsINS_17ProcessEventsFlagEE (libQt5Core.so.5 + 0x2866ec)
                #5  0x00007f6fcb6e725f _ZN7QThread4execEv (libQt5Core.so.5 + 0xe725f)
                #6  0x00007f6fc8253cba n/a (libQt5DBus.so.5 + 0x23cba)
                #7  0x00007f6fcb6e432a n/a (libQt5Core.so.5 + 0xe432a)
                #8  0x00007f6fcb09ebb5 n/a (libc.so.6 + 0x85bb5)
                #9  0x00007f6fcb120d90 n/a (libc.so.6 + 0x107d90)
                
                Stack trace of thread 70140:
                #0  0x00007f6fcb09b766 n/a (libc.so.6 + 0x82766)
                #1  0x00007f6fcb09e294 pthread_cond_timedwait (libc.so.6 + 0x85294)
                #2  0x00007f6fcb6eb754 _ZN14QWaitCondition4waitEP6QMutex14QDeadlineTimer (libQt5Core.so.5 + 0xeb754)
                #3  0x00007f6fcb6e82f7 n/a (libQt5Core.so.5 + 0xe82f7)
                #4  0x00007f6fcb6e432a n/a (libQt5Core.so.5 + 0xe432a)
                #5  0x00007f6fcb09ebb5 n/a (libc.so.6 + 0x85bb5)
                #6  0x00007f6fcb120d90 n/a (libc.so.6 + 0x107d90)
                
                Stack trace of thread 70137:
                #0  0x00007f6fcb052c0a __sigtimedwait (libc.so.6 + 0x39c0a)
                #1  0x00007f6fcb0522dc sigwait (libc.so.6 + 0x392dc)
                #2  0x000055e46dd6a9ae n/a (qmpanel + 0x179ae)
                #3  0x00007f6fcb2d72c3 execute_native_thread_routine (libstdc++.so.6 + 0xd72c3)
                #4  0x00007f6fcb09ebb5 n/a (libc.so.6 + 0x85bb5)
                #5  0x00007f6fcb120d90 n/a (libc.so.6 + 0x107d90)
                
                Stack trace of thread 70136:
                #0  0x00007f6fcb1139df __poll (libc.so.6 + 0xfa9df)
                #1  0x00007f6fc8322d1d n/a (libQt5WaylandClient.so.5 + 0x72d1d)
                #2  0x00007f6fcb6e432a n/a (libQt5Core.so.5 + 0xe432a)
                #3  0x00007f6fcb09ebb5 n/a (libc.so.6 + 0x85bb5)
                #4  0x00007f6fcb120d90 n/a (libc.so.6 + 0x107d90)
                
                Stack trace of thread 70135:
                #0  0x00007f6fcb09b766 n/a (libc.so.6 + 0x82766)
                #1  0x00007f6fcb09df90 pthread_cond_wait (libc.so.6 + 0x84f90)
                #2  0x00007f6fcb6eb7c4 _ZN14QWaitCondition4waitEP6QMutex14QDeadlineTimer (libQt5Core.so.5 + 0xeb7c4)
                #3  0x00007f6fc8322cc4 n/a (libQt5WaylandClient.so.5 + 0x72cc4)
                #4  0x00007f6fcb6e432a n/a (libQt5Core.so.5 + 0xe432a)
                #5  0x00007f6fcb09ebb5 n/a (libc.so.6 + 0x85bb5)
                #6  0x00007f6fcb120d90 n/a (libc.so.6 + 0x107d90)
                
                Stack trace of thread 70138:
                #0  0x00007f6fcb1139df __poll (libc.so.6 + 0xfa9df)
                #1  0x00007f6fccc6dc2f n/a (libglib-2.0.so.0 + 0xacc2f)
                #2  0x00007f6fccc150e2 g_main_context_iteration (libglib-2.0.so.0 + 0x540e2)
                #3  0x00007f6fccc15132 n/a (libglib-2.0.so.0 + 0x54132)
                #4  0x00007f6fccc43db5 n/a (libglib-2.0.so.0 + 0x82db5)
                #5  0x00007f6fcb09ebb5 n/a (libc.so.6 + 0x85bb5)
                #6  0x00007f6fcb120d90 n/a (libc.so.6 + 0x107d90)
                
                Stack trace of thread 70141:
                #0  0x00007f6fcb09b766 n/a (libc.so.6 + 0x82766)
                #1  0x00007f6fcb09e294 pthread_cond_timedwait (libc.so.6 + 0x85294)
                #2  0x00007f6fcb6eb754 _ZN14QWaitCondition4waitEP6QMutex14QDeadlineTimer (libQt5Core.so.5 + 0xeb754)
                #3  0x00007f6fcb6e82f7 n/a (libQt5Core.so.5 + 0xe82f7)
                #4  0x00007f6fcb6e432a n/a (libQt5Core.so.5 + 0xe432a)
                #5  0x00007f6fcb09ebb5 n/a (libc.so.6 + 0x85bb5)
                #6  0x00007f6fcb120d90 n/a (libc.so.6 + 0x107d90)
                
                Stack trace of thread 70139:
                #0  0x00007f6fcb1139df __poll (libc.so.6 + 0xfa9df)
                #1  0x00007f6fccc6dc2f n/a (libglib-2.0.so.0 + 0xacc2f)
                #2  0x00007f6fccc15d8f g_main_loop_run (libglib-2.0.so.0 + 0x54d8f)
                #3  0x00007f6fcce6baec n/a (libgio-2.0.so.0 + 0x10aaec)
                #4  0x00007f6fccc43db5 n/a (libglib-2.0.so.0 + 0x82db5)
                #5  0x00007f6fcb09ebb5 n/a (libc.so.6 + 0x85bb5)
                #6  0x00007f6fcb120d90 n/a (libc.so.6 + 0x107d90)
                
                Stack trace of thread 70143:
                #0  0x00007f6fcb09b766 n/a (libc.so.6 + 0x82766)
                #1  0x00007f6fcb09e294 pthread_cond_timedwait (libc.so.6 + 0x85294)
                #2  0x00007f6fcb6eb754 _ZN14QWaitCondition4waitEP6QMutex14QDeadlineTimer (libQt5Core.so.5 + 0xeb754)
                #3  0x00007f6fcb6e82f7 n/a (libQt5Core.so.5 + 0xe82f7)
                #4  0x00007f6fcb6e432a n/a (libQt5Core.so.5 + 0xe432a)
                #5  0x00007f6fcb09ebb5 n/a (libc.so.6 + 0x85bb5)
                #6  0x00007f6fcb120d90 n/a (libc.so.6 + 0x107d90)
                
                Stack trace of thread 70142:
                #0  0x00007f6fcb09b766 n/a (libc.so.6 + 0x82766)
                #1  0x00007f6fcb09e294 pthread_cond_timedwait (libc.so.6 + 0x85294)
                #2  0x00007f6fcb6eb754 _ZN14QWaitCondition4waitEP6QMutex14QDeadlineTimer (libQt5Core.so.5 + 0xeb754)
                #3  0x00007f6fcb6e82f7 n/a (libQt5Core.so.5 + 0xe82f7)
                #4  0x00007f6fcb6e432a n/a (libQt5Core.so.5 + 0xe432a)
                #5  0x00007f6fcb09ebb5 n/a (libc.so.6 + 0x85bb5)
                #6  0x00007f6fcb120d90 n/a (libc.so.6 + 0x107d90)
                ELF object binary architecture: AMD x86-64



(gdb) where
#0  0x00007f6fccf88dcf in  () at /usr/lib/libX11.so.6
#1  0x00007f6fccf8931e in XInternAtom () at /usr/lib/libX11.so.6
#2  0x000055e46dd6ffe8 in SysTray::SysTray(QWidget*) ()
#3  0x000055e46dd6ca30 in MainPanel::MainPanel(Resources&) ()
#4  0x000055e46dd68bb6 in main ()
(gdb) 

Wayland issue list (help wanted)

Keyboard focus:

  • Panel grabs focus from the active window at startup (it should not get focus until a menu is opened) (fixed by labwc/labwc@6990ff7)

  • After switching focus back to another window, panel loses keyboard focus and clicking the applications menu does not grab focus (cannot type to search) (fixed by labwc/labwc@a5fcbfa)

  • Panel does not give keyboard focus back to the active/top application after a menu is closed

Menu positioning:

  • Menus (including the applications menu, system tray icon menus, and the calendar popup) are aligned to the bottom of the screen, overlapping the panel (a possible fix is in labwc/labwc#1646 but it may not be correct)

  • Category submenus (e.g. "Multimedia" or "Network") are aligned to the top of the panel rather than the corresponding item in the (parent) applications menu

  • In type-to-search mode (which shrinks the applications menu), the menu position does not adjust to stay aligned to the panel, leaving a large gap between the menu and panel

  • When the panel is not focused, clicking on a system tray icon causes its menu to pop up in the center of the screen and have window decorations (titlebar etc.) (fixed with 631a7b9)

Micellaneous:

Tested with:

  • qmpanel @ 1190773
  • Qt 6.6.2
  • layer-shell-qt 6.0.1
  • labwc 0.7.1 (my 0.7.1-fixes branch as of 2024-03-15)
  • wlroots 0.17.1 (my 0.17-backports branch as of 2024-03-15)

Move to Wayland and foreign-toplevel-protocol

Hi there. Hope you're keeping well.
Just a quick note to mention https://github.com/johanmalm/tint
It's a super simple test panel that I'm using to test a few things with labwc but it demonstrate the following:

  • Getting hold of wl_display in a portable way (link with Qt::GuiPrivate) and thus getting foreign-toplevel working (I'm just using minimise-raise behaviour).
  • That popup menus work (as of Qt 6.5 I think).
    You're probably up on all that, but dropping the note just in case you weren't.

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.