aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core
diff options
context:
space:
mode:
Diffstat (limited to 'src-qt5/core')
-rw-r--r--src-qt5/core/libLumina/DesktopSettings.cpp57
-rw-r--r--src-qt5/core/libLumina/DesktopSettings.h8
-rw-r--r--src-qt5/core/libLumina/LDesktopUtils.cpp36
-rw-r--r--src-qt5/core/libLumina/LDesktopUtils.h4
-rw-r--r--src-qt5/core/libLumina/LIconCache.cpp23
-rw-r--r--src-qt5/core/libLumina/LIconCache.h4
-rw-r--r--src-qt5/core/libLumina/LUtils.cpp27
-rw-r--r--src-qt5/core/libLumina/LUtils.h9
-rw-r--r--src-qt5/core/libLumina/LuminaSingleApplication.cpp12
-rw-r--r--src-qt5/core/libLumina/LuminaThemes.cpp75
-rw-r--r--src-qt5/core/libLumina/LuminaXDG.cpp176
-rw-r--r--src-qt5/core/libLumina/LuminaXDG.h12
-rw-r--r--src-qt5/core/libLumina/NativeEmbedWidget.cpp362
-rw-r--r--src-qt5/core/libLumina/NativeEmbedWidget.h17
-rw-r--r--src-qt5/core/libLumina/NativeEventFilter.cpp11
-rw-r--r--src-qt5/core/libLumina/NativeEventFilter.h1
-rw-r--r--src-qt5/core/libLumina/NativeWindow.cpp4
-rw-r--r--src-qt5/core/libLumina/NativeWindow.h1
-rw-r--r--src-qt5/core/libLumina/NativeWindow.pri1
-rw-r--r--src-qt5/core/libLumina/NativeWindowSystem.cpp108
-rw-r--r--src-qt5/core/libLumina/NativeWindowSystem.h1
-rw-r--r--src-qt5/core/libLumina/RootSubWindow-animations.cpp27
-rw-r--r--src-qt5/core/libLumina/RootSubWindow.cpp162
-rw-r--r--src-qt5/core/libLumina/RootSubWindow.h14
-rw-r--r--src-qt5/core/libLumina/RootWindow-mgmt.cpp58
-rw-r--r--src-qt5/core/libLumina/RootWindow.cpp64
-rw-r--r--src-qt5/core/libLumina/RootWindow.h14
-rw-r--r--src-qt5/core/libLumina/XDGMime.cpp3
-rw-r--r--src-qt5/core/lumina-desktop-unified/JsonMenu.h (renamed from src-qt5/core/lumina-desktop-unified/src-DE/JsonMenu.h)18
-rw-r--r--src-qt5/core/lumina-desktop-unified/LSession.cpp54
-rw-r--r--src-qt5/core/lumina-desktop-unified/LSession.h4
-rw-r--r--src-qt5/core/lumina-desktop-unified/defaults/compton.conf89
-rw-r--r--src-qt5/core/lumina-desktop-unified/defaults/desktop/keys.conf2
-rw-r--r--src-qt5/core/lumina-desktop-unified/defaults/desktop/screensaver.conf3
-rw-r--r--src-qt5/core/lumina-desktop-unified/global-includes.h5
-rw-r--r--src-qt5/core/lumina-desktop-unified/global-objects.h1
-rw-r--r--src-qt5/core/lumina-desktop-unified/lumina-desktop.pro4
-rw-r--r--src-qt5/core/lumina-desktop-unified/main.cpp2
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/AppMenu.cpp183
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/AppMenu.h58
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/LDesktop.cpp553
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/LDesktop.h107
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/LDesktopBackground.cpp90
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/LDesktopBackground.h27
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/LDesktopPluginSpace.cpp333
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/LDesktopPluginSpace.h303
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/LPanel.cpp399
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/LPanel.h81
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/LSession.cpp798
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/LSession.h193
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/LWinInfo.cpp48
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/LWinInfo.h50
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/LXcbEventFilter.cpp118
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/LXcbEventFilter.h104
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/SettingsMenu.cpp67
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/SettingsMenu.h28
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/SystemWindow.cpp104
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/SystemWindow.h46
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/SystemWindow.ui194
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/LDPlugin.cpp63
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/LDPlugin.h156
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/NewDP.h63
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/SamplePlugin.h38
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/applauncher/AppLauncherPlugin.cpp145
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/applauncher/AppLauncherPlugin.h59
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/applauncher/OutlineToolButton.h99
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/audioplayer/PlayerWidget.cpp271
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/audioplayer/PlayerWidget.h84
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/audioplayer/PlayerWidget.ui182
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/calendar/CalendarPlugin.h59
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/desktop-plugins.pri24
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/desktopview/DesktopViewPlugin.cpp214
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/desktopview/DesktopViewPlugin.h55
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/messagecenter/LXDG-DBusNotifier.h17
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/messagecenter/MessageCenter.cpp90
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/messagecenter/MessageCenter.h48
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/notepad/NotepadPlugin.cpp330
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/notepad/NotepadPlugin.h66
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/quickcontainer/QuickDPlugin.h51
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSFeedPlugin.cpp363
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSFeedPlugin.h72
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSFeedPlugin.ui552
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSObjects.cpp287
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSObjects.h105
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/systemmonitor/MonitorWidget.cpp63
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/systemmonitor/MonitorWidget.h62
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/systemmonitor/MonitorWidget.ui143
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/LPPlugin.h77
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/LTBWidget.h71
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/NewPP.h82
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/RotateToolButton.h58
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/applauncher/AppLaunchButton.cpp77
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/applauncher/AppLaunchButton.h63
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/appmenu/LAppMenuPlugin.cpp142
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/appmenu/LAppMenuPlugin.h64
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/LPAudioPlayer.cpp30
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/LPAudioPlayer.h49
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/PPlayerWidget.cpp258
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/PPlayerWidget.h59
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/PPlayerWidget.ui182
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/battery/LBattery.cpp115
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/battery/LBattery.h53
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/battery/NOTES49
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/clock/LClock.cpp230
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/clock/LClock.h58
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/desktopbar/LDeskBar.cpp207
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/desktopbar/LDeskBar.h88
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/desktopswitcher/LDesktopSwitcher.cpp148
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/desktopswitcher/LDesktopSwitcher.h73
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/jsonmenu/PPJsonMenu.cpp35
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/jsonmenu/PPJsonMenu.h42
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/line/LLine.h40
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/panel-plugins.pri57
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/quickcontainer/QuickPPlugin.h43
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/showdesktop/LHomeButton.cpp43
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/showdesktop/LHomeButton.h62
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/spacer/LSpacer.h34
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/LSysDashboard.cpp91
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/LSysDashboard.h76
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/SysMenuQuick.cpp211
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/SysMenuQuick.h54
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/SysMenuQuick.ui400
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/ItemWidget.cpp279
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/ItemWidget.h98
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/LStartButton.cpp137
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/LStartButton.h113
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/StartMenu.cpp720
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/StartMenu.h105
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/StartMenu.ui1148
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemtray/LSysTray.cpp167
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemtray/LSysTray.h74
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemtray/TrayIcon.cpp128
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemtray/TrayIcon.h55
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/taskmanager/LTaskButton.cpp271
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/taskmanager/LTaskButton.h73
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/taskmanager/LTaskManagerPlugin.cpp141
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/taskmanager/LTaskManagerPlugin.h71
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/LUserButton.cpp67
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/LUserButton.h75
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserItemWidget.cpp205
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserItemWidget.h72
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserWidget.cpp393
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserWidget.h101
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserWidget.ui593
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.cpp140
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.h11
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp20
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.h1
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp24
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.h4
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.cpp26
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.h10
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Fireflies.h41
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h26
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/animations/ImageSlideshow.h100
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/animations/SampleAnimation.h2
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Text.h24
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/animations/VideoSlideshow.h91
-rw-r--r--src-qt5/core/lumina-desktop/AppMenu.cpp2
-rw-r--r--src-qt5/core/lumina-desktop/LDesktop.cpp10
-rw-r--r--src-qt5/core/lumina-desktop/LSession.cpp2
-rw-r--r--src-qt5/core/lumina-desktop/SystemWindow.cpp1
-rw-r--r--src-qt5/core/lumina-desktop/defaults/luminaDesktop-TrueOS.conf28
-rw-r--r--src-qt5/core/lumina-desktop/defaults/luminaDesktop.conf11
-rw-r--r--src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h11
-rw-r--r--src-qt5/core/lumina-desktop/desktop-plugins/systemmonitor/MonitorWidget.cpp7
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts99
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts99
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts99
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_AU.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts89
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts89
-rw-r--r--src-qt5/core/lumina-desktop/main.cpp8
-rw-r--r--src-qt5/core/lumina-desktop/panel-plugins/applauncher/AppLaunchButton.h16
-rw-r--r--src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.cpp2
-rw-r--r--src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.h15
-rw-r--r--src-qt5/core/lumina-desktop/panel-plugins/desktopswitcher/LDesktopSwitcher.cpp2
-rw-r--r--src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp78
-rw-r--r--src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskButton.cpp7
-rw-r--r--src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskButton.h13
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_af.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_ar.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_az.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_bg.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_bn.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_bs.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_ca.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_cs.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_cy.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_da.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_de.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_el.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_en_AU.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_en_GB.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_en_ZA.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_es.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_et.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_eu.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_fa.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_fi.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_fr.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_fr_CA.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_gl.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_he.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_hi.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_hr.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_hu.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_id.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_is.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_it.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_ja.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_ka.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_ko.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_lt.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_lv.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_mk.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_mn.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_ms.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_mt.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_nb.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_nl.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_pa.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_pl.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_pt.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_pt_BR.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_ro.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_ru.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_sk.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_sl.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_sr.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_sv.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_sw.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_ta.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_tg.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_th.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_tr.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_uk.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_uz.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_vi.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_zh_CN.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_zh_HK.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_zh_TW.ts68
-rw-r--r--src-qt5/core/lumina-info/i18n/lumina-info_zu.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_af.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ar.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_az.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_bg.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_bn.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_bs.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ca.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_cs.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_cy.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_da.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_de.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_el.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_en_AU.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_en_GB.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_en_ZA.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_es.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_et.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_eu.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_fa.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_fi.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_fr.ts78
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_fr_CA.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_gl.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_he.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_hi.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_hr.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_hu.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_id.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_is.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_it.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ja.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ka.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ko.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_lt.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_lv.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_mk.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_mn.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ms.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_mt.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_nb.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_nl.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_pa.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_pl.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_pt.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_pt_BR.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ro.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ru.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_sk.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_sl.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_sr.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_sv.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_sw.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ta.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_tg.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_th.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_tr.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_uk.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_uz.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_vi.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_zh_CN.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_zh_HK.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_zh_TW.ts68
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_zu.ts68
-rw-r--r--src-qt5/core/lumina-open/main.cpp18
-rw-r--r--src-qt5/core/lumina-theme-engine/desktop_qss/DarkGlass.qss91
-rw-r--r--src-qt5/core/lumina-theme-engine/desktop_qss/Glass.qss91
-rw-r--r--src-qt5/core/lumina-theme-engine/lumina-theme-engine.pro8
-rw-r--r--src-qt5/core/lumina-theme-engine/qss/scrollbar-simple.qss30
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.cpp43
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.h2
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.cpp6
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.ui6
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/cursorthemepage.cpp139
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/cursorthemepage.h29
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/cursorthemepage.ui51
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.cpp4
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.cpp120
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.desktop2
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.h8
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.pro9
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.cpp32
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.h6
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.ui293
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.cpp148
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.h13
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.ui309
386 files changed, 16504 insertions, 17527 deletions
diff --git a/src-qt5/core/libLumina/DesktopSettings.cpp b/src-qt5/core/libLumina/DesktopSettings.cpp
index 8bda1ac5..f1c74bc5 100644
--- a/src-qt5/core/libLumina/DesktopSettings.cpp
+++ b/src-qt5/core/libLumina/DesktopSettings.cpp
@@ -56,11 +56,19 @@ void DesktopSettings::stop(){
}
//Main Read/Write functions
+QList< DesktopSettings::File > DesktopSettings::writableFiles(){
+ QList< DesktopSettings::File > tmp;
+ if(runmode!=DesktopSettings::SystemFull){ tmp = filesForRunMode(runmode); }
+ return tmp;
+}
+
QVariant DesktopSettings::value(DesktopSettings::File file, QString variable, QVariant defaultvalue){
if(!files.contains(file)){ return defaultvalue; }
for(int i=0; i<files[file].length(); i++){
+ //qDebug() << "Look for Settings value:" << variable << files[file];
if( settings.contains(files[file][i])){ //make sure this file is in the settings hash
if(settings[files[file][i]]->contains(variable)){ //if this file does not have the variable - go to the next one
+ //qDebug() << " - Found Setting in File:" << files[file][i];
return settings[files[file][i]]->value(variable, defaultvalue);
}
}
@@ -118,7 +126,7 @@ void DesktopSettings::parseSystemSettings(){
QString defMode = settings[path]->value("default_mode","fulluser").toString().toLower();
if(defMode=="fullsystem"){ runmode= DesktopSettings::SystemFull; }
else if(defMode=="staticinterface"){ runmode = DesktopSettings::SystemInterface; }
-
+ else{ runmode = DesktopSettings::UserFull; }
//Now determine the runmode for this user
struct passwd *pw = getpwuid(getuid());
if(pw!=0){
@@ -178,25 +186,29 @@ void DesktopSettings::locateFiles(){
systemdirs << QString(getenv("XDG_CONFIG_DIRS")).split(":") << QString(getenv("XDG_DATA_DIRS")).split(":");
//Load all the user-level files for this run mode
QList< DesktopSettings::File > tmp;
- if(runmode == DesktopSettings::UserFull){ tmp << DesktopSettings::Favorites << DesktopSettings::Environment << DesktopSettings::Session << DesktopSettings::Desktop << DesktopSettings::Keys << DesktopSettings::Theme; }
- else if(runmode == DesktopSettings::SystemInterface){ tmp << DesktopSettings::Favorites << DesktopSettings::Environment << DesktopSettings::Session << DesktopSettings::Desktop << DesktopSettings::Keys << DesktopSettings::Theme; }
- for(int i=0; i<tmp.length(); i++){
- QString path = userdir+rel_path(tmp[i]);
- touchFile(path);
- files.insert(tmp[i], QStringList() << path);
- settings.insert(path, new QSettings(path, QSettings::IniFormat, this) );
- watcher->addPath(path);
+ if(runmode!=DesktopSettings::SystemFull){
+ //Load the user-level files
+ tmp= filesForRunMode(runmode);
+ for(int i=0; i<tmp.length(); i++){
+ QString path = userdir+rel_path(tmp[i]);
+ touchFile(path);
+ files.insert(tmp[i], QStringList() << path);
+ settings.insert(path, new QSettings(path, QSettings::IniFormat, this) );
+ watcher->addPath(path);
+ }
}
//Now load all the system-level files
- tmp.clear();
- tmp << DesktopSettings::Favorites << DesktopSettings::Environment << DesktopSettings::Session << DesktopSettings::Desktop << DesktopSettings::Keys << DesktopSettings::Theme;
+ tmp = filesForRunMode(DesktopSettings::SystemFull);
for(int i=0; i<systemdirs.length(); i++){
if(systemdirs[i].endsWith("/xdg")){ systemdirs[i] = systemdirs[i].section("/",0,-2); }
if( !QFile::exists(systemdirs[i]+"/lumina-desktop") ){ continue; }
for(int j=0; j<tmp.length(); j++){
QString path = systemdirs[i]+rel_path(tmp[j]);
if(QFile::exists(path)){
- files.insert(tmp[j], QStringList() << path);
+ QStringList filepaths;
+ if(files.contains(tmp[j])){ filepaths = files[tmp[j]]; }
+ filepaths << path; //add this file to the end of the list for this type of settings file
+ files.insert(tmp[j], filepaths);
settings.insert(path, new QSettings(path, QSettings::IniFormat, this) );
watcher->addPath(path);
}
@@ -219,6 +231,17 @@ void DesktopSettings::touchFile(QString path){
}
}
+QList< DesktopSettings::File > DesktopSettings::filesForRunMode(RunMode mode){
+ // Note that the "System" file is always ignored here - that is specially loaded
+ QList< DesktopSettings::File > tmp;
+ if(mode == DesktopSettings::UserFull || mode == DesktopSettings::SystemFull){
+ tmp << DesktopSettings::Favorites << DesktopSettings::Environment << DesktopSettings::Session << DesktopSettings::Desktop << DesktopSettings::Panels << DesktopSettings::Plugins << DesktopSettings::Keys << DesktopSettings::ContextMenu << DesktopSettings::Animation << DesktopSettings::ScreenSaver << DesktopSettings::WM;
+ }else if(runmode == DesktopSettings::SystemInterface){
+ tmp << DesktopSettings::Favorites << DesktopSettings::Environment << DesktopSettings::Session;
+ }
+ return tmp;
+}
+
QString DesktopSettings::rel_path(DesktopSettings::File file){
QString name;
switch(file){
@@ -236,10 +259,16 @@ QString DesktopSettings::rel_path(DesktopSettings::File file){
name="contextmenu"; break;
case DesktopSettings::Keys:
name="keys"; break;
- case DesktopSettings::Theme:
- name="theme"; break;
case DesktopSettings::Animation:
name="animations"; break;
+ case DesktopSettings::Panels:
+ name="panels"; break;
+ case DesktopSettings::Plugins:
+ name="plugins"; break;
+ case DesktopSettings::ScreenSaver:
+ name="screensaver"; break;
+ case DesktopSettings::WM:
+ name="windows"; break;
}
return FILEPREFIX+name+".conf";
}
diff --git a/src-qt5/core/libLumina/DesktopSettings.h b/src-qt5/core/libLumina/DesktopSettings.h
index dcb10bb6..efb3776e 100644
--- a/src-qt5/core/libLumina/DesktopSettings.h
+++ b/src-qt5/core/libLumina/DesktopSettings.h
@@ -25,7 +25,8 @@
class DesktopSettings : public QObject{
Q_OBJECT
public:
- enum File{ System, Favorites, Environment, Session, Desktop, ContextMenu, Keys, Theme, Animation };
+ enum File{ System, Favorites, Environment, Session, Desktop, Panels, Plugins, ContextMenu, Keys, Animation, ScreenSaver, WM};
+ //Changes to this enum need to be added to the "filesForRunMode()" and "rel_path()" functions as well
DesktopSettings(QObject *parent = 0);
~DesktopSettings();
@@ -37,6 +38,7 @@ public:
void stop();
//Main Read/Write functions
+ QList< DesktopSettings::File > writableFiles(); //return the list of all writable files
QVariant value(DesktopSettings::File, QString variable, QVariant defaultvalue);
bool setValue(DesktopSettings::File, QString variable, QVariant value);
QStringList keys(DesktopSettings::File); //return a list of all variables which are available in this file
@@ -51,9 +53,13 @@ private:
QHash< DesktopSettings::File, QStringList > files; //location hash for where files are actually located on disk
QHash< QString, QSettings*> settings; //location hash for the settings files themselves
+ //Functions
void parseSystemSettings(); //run at start - determine the RunMode for this user/session
void locateFiles(); //run at start - finds the locations of the various files (based on RunMode)
void touchFile(QString path); //used to create an empty file so it can be watched for changes later
+
+ //The two functions which define the public "File" enumeration (both need updates when the enum changes)
+ QList< DesktopSettings::File > filesForRunMode(RunMode mode);
QString rel_path(DesktopSettings::File); //return the relative file path (starting with "/")
private slots:
diff --git a/src-qt5/core/libLumina/LDesktopUtils.cpp b/src-qt5/core/libLumina/LDesktopUtils.cpp
index b79f777d..54e660e6 100644
--- a/src-qt5/core/libLumina/LDesktopUtils.cpp
+++ b/src-qt5/core/libLumina/LDesktopUtils.cpp
@@ -16,7 +16,7 @@
static QStringList fav;
QString LDesktopUtils::LuminaDesktopVersion(){
- QString ver = "1.3.2";
+ QString ver = "1.3.3";
#ifdef GIT_VERSION
ver.append( QString(" (Git Revision: %1)").arg(GIT_VERSION) );
#endif
@@ -143,6 +143,8 @@ void LDesktopUtils::upgradeFavorites(int){ //fromoldversionnumber
void LDesktopUtils::LoadSystemDefaults(bool skipOS){
//Will create the Lumina configuration files based on the current system template (if any)
qDebug() << "Loading System Defaults";
+ bool skipmime = QFile::exists( QString(getenv("XDG_CONFIG_HOME"))+"/lumina-mimapps.list" );
+ qDebug() << " - Skipping mimetype default apps" << skipmime;
QStringList sysDefaults;
if(!skipOS){ sysDefaults = LUtils::readFile(LOS::AppPrefix()+"etc/luminaDesktop.conf"); }
if(sysDefaults.isEmpty() && !skipOS){ sysDefaults = LUtils::readFile(LOS::AppPrefix()+"etc/luminaDesktop.conf.dist"); }
@@ -193,18 +195,18 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){
if(var=="session_enablenumlock"){ sset = "EnableNumlock="+ istrue; }
else if(var=="session_playloginaudio"){ sset = "PlayStartupAudio="+istrue; }
else if(var=="session_playlogoutaudio"){ sset = "PlayLogoutAudio="+istrue; }
- else if(var=="session_default_terminal"){
+ else if(var=="session_default_terminal" && !skipmime){
LXDG::setDefaultAppForMime("application/terminal", val);
//sset = "default-terminal="+val;
- }else if(var=="session_default_filemanager"){
+ }else if(var=="session_default_filemanager" && !skipmime){
LXDG::setDefaultAppForMime("inode/directory", val);
//sset = "default-filemanager="+val;
//loset = "directory="+val;
- }else if(var=="session_default_webbrowser"){
+ }else if(var=="session_default_webbrowser" && !skipmime){
//loset = "webbrowser="+val;
LXDG::setDefaultAppForMime("x-scheme-handler/http", val);
LXDG::setDefaultAppForMime("x-scheme-handler/https", val);
- }else if(var=="session_default_email"){
+ }else if(var=="session_default_email" && !skipmime){
LXDG::setDefaultAppForMime("application/email",val);
//loset = "email="+val;
}
@@ -225,7 +227,7 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){
// -- MIMETYPE DEFAULTS --
tmp = sysDefaults.filter("mime_default_");
- for(int i=0; i<tmp.length(); i++){
+ for(int i=0; i<tmp.length() && !skipmime; i++){
if(tmp[i].startsWith("#") || !tmp[i].contains("=") ){ continue; }
QString var = tmp[i].section("=",0,0).toLower().simplified();
QString val = tmp[i].section("=",1,1).section("#",0,0).simplified();
@@ -337,6 +339,16 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){
else if(var=="favorites_remove"){ qDebug() << " - Removing:"; LDesktopUtils::removeFavorite(val); }
}
+ tmp = sysDefaults.filter("desktoplinks_");
+ QString desktopFolder = QDir::homePath()+"/Desktop/"; //need to make this translatable and dynamic later
+ for(int i=0; i<tmp.length(); i++){
+ if(tmp[i].startsWith("#") || !tmp[i].contains("=") ){ continue; }
+ QString var = tmp[i].section("=",0,0).toLower().simplified();
+ QString val = tmp[i].section("=",1,1).section("#",0,0).simplified();
+ val = LUtils::AppToAbsolute(val); //turn any relative files into absolute
+ if(var=="desktoplinks_add" && QFile::exists(val) && !QFile::exists(desktopFolder+val.section("/",-1)) ){ QFile::link(val, desktopFolder+val.section("/",-1)); }
+ }
+
// -- QUICKLAUNCH --
tmp = sysDefaults.filter("quicklaunch_");
if(tmp.isEmpty()){ tmp = sysDefaults.filter("quicklaunch."); }
@@ -409,6 +421,7 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){
}
}
}
+
}
//qDebug() << " - Final Theme Color:" << themesettings[1];
@@ -419,7 +432,16 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){
dir.mkpath(setdir);
}
//Now save the settings files
- if(setTheme){ LTHEME::setCurrentSettings( themesettings[0], themesettings[1], themesettings[2], themesettings[3], themesettings[4]); }
+ if(setTheme){
+ LTHEME::setCurrentSettings( themesettings[0], themesettings[1], themesettings[2], themesettings[3], themesettings[4]);
+ QSettings themeset("lthemeengine","lthemeengine");
+ themeset.setValue("Appearance/icon_theme",themesettings[2]);
+ //Quick hack for a "dark" theme/color to be uniform across the desktop/applications
+ if(themesettings[0].contains("DarkGlass") || themesettings[1].contains("Black")){
+ themeset.setValue("Appearance/custom_palette", true);
+ themeset.setValue("Appearance/color_scheme_path", LOS::LuminaShare().section("/",0,-3)+"/lthemeengine/colors/darker.conf");
+ }
+ }
LUtils::writeFile(setdir+"/sessionsettings.conf", sesset, true);
LUtils::writeFile(setdir+"/desktopsettings.conf", deskset, true);
diff --git a/src-qt5/core/libLumina/LDesktopUtils.h b/src-qt5/core/libLumina/LDesktopUtils.h
index b21bc78a..a9b44c67 100644
--- a/src-qt5/core/libLumina/LDesktopUtils.h
+++ b/src-qt5/core/libLumina/LDesktopUtils.h
@@ -30,7 +30,7 @@ public:
static QString findQuickPluginFile(QString ID);
static QStringList listQuickPlugins(); //List of valid ID's
static QStringList infoQuickPlugin(QString ID); //Returns: [Name, Description, Icon]
-
+
//Various functions for the favorites sub-system
// Formatting Note: "<name>::::[dir/app/<mimetype>]::::<path>"
// the <name> field might not be used for "app" flagged entries
@@ -40,7 +40,7 @@ public:
static bool addFavorite(QString path, QString name = "");
static void removeFavorite(QString path);
static void upgradeFavorites(int fromoldversionnumber);
-
+
//Load the default setup for the system
static void LoadSystemDefaults(bool skipOS = false);
static bool checkUserFiles(QString lastversion); //returns true if something changed
diff --git a/src-qt5/core/libLumina/LIconCache.cpp b/src-qt5/core/libLumina/LIconCache.cpp
index 70c360fb..84428546 100644
--- a/src-qt5/core/libLumina/LIconCache.cpp
+++ b/src-qt5/core/libLumina/LIconCache.cpp
@@ -184,6 +184,27 @@ void LIconCache::loadIcon(QLabel *label, QString icon, bool noThumb){
if(needload){ startReadFile(icon, idata.fullpath); }
}
+void LIconCache::loadIcon(QMenu *action, QString icon, bool noThumb){
+ if(icon.isEmpty()){ return; }
+ if(isThemeIcon(icon)){
+ action->setIcon( iconFromTheme(icon));
+ return ;
+ }
+ //See if the icon has already been loaded into the HASH
+ bool needload = !HASH.contains(icon);
+ if(!needload){
+ if(!noThumb && !HASH[icon].thumbnail.isNull()){ action->setIcon( HASH[icon].thumbnail ); return; }
+ else if(!HASH[icon].icon.isNull()){ action->setIcon( HASH[icon].icon ); return; }
+ }
+ //Need to load the icon
+ icon_data idata;
+ if(HASH.contains(icon)){ idata = HASH.value(icon); }
+ else { idata = createData(icon); }
+ idata.pendingMenus << QPointer<QMenu>(action); //save this button for later
+ HASH.insert(icon, idata);
+ if(needload){ startReadFile(icon, idata.fullpath); }
+}
+
void LIconCache::clearIconTheme(){
//use when the icon theme changes to refresh all requested icons
QStringList keys = HASH.keys();
@@ -282,6 +303,8 @@ void LIconCache::startReadFile(QString id, QString path){
idat.pendingLabels.clear();
for(int i=0; i<idat.pendingActions.length(); i++){ if(!idat.pendingActions[i].isNull()){ idat.pendingActions[i]->setIcon(idat.icon); } }
idat.pendingActions.clear();
+ for(int i=0; i<idat.pendingMenus.length(); i++){ if(!idat.pendingMenus[i].isNull()){ idat.pendingMenus[i]->setIcon(idat.icon); } }
+ idat.pendingMenus.clear();
//Now update the hash and let the world know it is available now
HASH.insert(id, idat);
this->emit IconAvailable(id);
diff --git a/src-qt5/core/libLumina/LIconCache.h b/src-qt5/core/libLumina/LIconCache.h
index 428ffcab..691d328c 100644
--- a/src-qt5/core/libLumina/LIconCache.h
+++ b/src-qt5/core/libLumina/LIconCache.h
@@ -4,7 +4,7 @@
// Available under the 3-clause BSD license
// See the LICENSE file for full details
//===========================================
-// This is a simple class for loading/serving icon files
+// This is a simple class for loading/serving icon files
// from the icon theme or local filesystem
//===========================================
#include <QHash>
@@ -26,6 +26,7 @@ struct icon_data{
QList<QPointer<QLabel> > pendingLabels;
QList<QPointer<QAbstractButton> > pendingButtons;
QList<QPointer<QAction> > pendingActions;
+ QList<QPointer<QMenu> > pendingMenus;
QIcon icon;
QIcon thumbnail;
};
@@ -50,6 +51,7 @@ public:
void loadIcon(QAbstractButton *button, QString icon, bool noThumb = false);
void loadIcon(QLabel *label, QString icon, bool noThumb = false);
void loadIcon(QAction *action, QString icon, bool noThumb = false);
+ void loadIcon(QMenu *action, QString icon, bool noThumb = false);
QIcon loadIcon(QString icon, bool noThumb = false); //generic loading routine - does not background the loading of icons when not in the cache
diff --git a/src-qt5/core/libLumina/LUtils.cpp b/src-qt5/core/libLumina/LUtils.cpp
index fa0173dc..491778ca 100644
--- a/src-qt5/core/libLumina/LUtils.cpp
+++ b/src-qt5/core/libLumina/LUtils.cpp
@@ -26,7 +26,7 @@ inline QStringList ProcessRun(QString cmd, QStringList args){
if(args.isEmpty()){
proc.start(cmd, QIODevice::ReadOnly);
}else{
- proc.start(cmd,args ,QIODevice::ReadOnly);
+ proc.start(cmd,args ,QIODevice::ReadOnly);
}
QString info;
while(!proc.waitForFinished(1000)){
@@ -37,7 +37,7 @@ inline QStringList ProcessRun(QString cmd, QStringList args){
}
out[0] = QString::number(proc.exitCode());
out[1] = info+QString(proc.readAllStandardOutput());
- return out;
+ return out;
}
//=============
// LUtils Functions
@@ -59,7 +59,6 @@ int LUtils::runCmd(QString cmd, QStringList args){
return ret;*/
QFuture<QStringList> future = QtConcurrent::run(ProcessRun, cmd, args);
return future.result()[0].toInt(); //turn it back into an integer return code
-
}
QStringList LUtils::getCmdOutput(QString cmd, QStringList args){
@@ -72,7 +71,7 @@ QStringList LUtils::getCmdOutput(QString cmd, QStringList args){
if(args.isEmpty()){
proc.start(cmd);
}else{
- proc.start(cmd,args);
+ proc.start(cmd,args);
}
//if(!proc.waitForStarted(30000)){ return QStringList(); } //process never started - max wait of 30 seconds
while(!proc.waitForFinished(300)){
@@ -118,7 +117,7 @@ bool LUtils::isValidBinary(QString& bin){
//Relative path: search for it on the current "PATH" settings
QStringList paths = QString(qgetenv("PATH")).split(":");
for(int i=0; i<paths.length(); i++){
- if(QFile::exists(paths[i]+"/"+bin)){ bin = paths[i]+"/"+bin; break;}
+ if(QFile::exists(paths[i]+"/"+bin)){ bin = paths[i]+"/"+bin; break;}
}
}
//bin should be the full path by now
@@ -150,7 +149,7 @@ QSettings* LUtils::openSettings(QString org, QString name, QObject *parent){
}else{
return (new QSettings(filepath, QSettings::IniFormat, parent));
}
-
+
}
QStringList LUtils::systemApplicationDirs(){
@@ -164,7 +163,7 @@ QStringList LUtils::systemApplicationDirs(){
for(int i=0; i<appDirs.length(); i++){
if( QFile::exists(appDirs[i]+"/applications") ){
out << appDirs[i]+"/applications";
- //Also check any subdirs within this directory
+ //Also check any subdirs within this directory
// (looking at you KDE - stick to the standards!!)
out << LUtils::listSubDirectories(appDirs[i]+"/applications");
}
@@ -197,7 +196,7 @@ QString LUtils::GenerateOpenTerminalExec(QString term, QString dirpath){
}else if(term=="konsole" || term == "qterminal"){
exec = term+" --workdir \""+dirpath+"\"";
}else{
- //-e is the parameter for most of the terminal appliction to execute an external command.
+ //-e is the parameter for most of the terminal appliction to execute an external command.
//In this case we start a shell in the selected directory
//Need the user's shell first
QString shell = QString(getenv("SHELL"));
@@ -253,12 +252,18 @@ QString LUtils::AppToAbsolute(QString path){
return path;
}
+QStringList LUtils::videoExtensions() {
+ static QStringList vidExtensions;
+ vidExtensions << "avi" << "mkv" << "mp4" << "mov" << "webm" << "wmv";
+ return vidExtensions;
+}
+
QStringList LUtils::imageExtensions(bool wildcards){
//Note that all the image extensions are lowercase!!
static QStringList imgExtensions;
if(imgExtensions.isEmpty()){
QList<QByteArray> fmt = QImageReader::supportedImageFormats();
- for(int i=0; i<fmt.length(); i++){
+ for(int i=0; i<fmt.length(); i++){
if(wildcards){ imgExtensions << "*."+QString::fromLocal8Bit(fmt[i]); }
else{ imgExtensions << QString::fromLocal8Bit(fmt[i]); }
}
@@ -308,7 +313,7 @@ QStringList LUtils::imageExtensions(bool wildcards){
qDebug() << "Loading System Encoding:" << langEnc;
}
//Load current encoding for this locale
- QTextCodec::setCodecForLocale( QTextCodec::codecForName(langEnc.toUtf8()) );
+ QTextCodec::setCodecForLocale( QTextCodec::codecForName(langEnc.toUtf8()) );
return cTrans;
}
@@ -379,7 +384,7 @@ void LUtils::setLocaleEnv(QString lang, QString msg, QString time, QString num,Q
else{
if(!ctype.contains(".")){ ctype.append(".UTF-8"); }
setenv("LC_CTYPE",ctype.toUtf8(),1);
- }
+ }
}
QString LUtils::currentLocale(){
diff --git a/src-qt5/core/libLumina/LUtils.h b/src-qt5/core/libLumina/LUtils.h
index 4ad05ca1..a494d4da 100644
--- a/src-qt5/core/libLumina/LUtils.h
+++ b/src-qt5/core/libLumina/LUtils.h
@@ -55,7 +55,7 @@ public:
//Create the exec string to open a terminal in a particular directory
static QString GenerateOpenTerminalExec(QString term, QString dirpath);
-
+
//List all the sub-directories of a parent dir (recursive)
static QStringList listSubDirectories(QString dir, bool recursive = true);
@@ -65,18 +65,19 @@ public:
//Get the list of all file extensions which Qt can read (lowercase)
static QStringList imageExtensions(bool wildcards = false);
-
+ static QStringList videoExtensions();
+
//Load a translation file for a Lumina Project
static QTranslator* LoadTranslation(QApplication *app, QString appname, QString locale = "", QTranslator *cTrans = 0);
//Other localization shortcuts
static QStringList knownLocales(); //Note: This only lists locales known to Lumina (so the i18n files need to be installed)
static void setLocaleEnv(QString lang, QString msg="", QString time="", QString num="" ,QString money="",QString collate="", QString ctype="");
static QString currentLocale();
-
+
//Number format conversions
static double DisplaySizeToBytes(QString num); //Turn a display size (like 50M or 50KB) into a double for calculations (bytes)
static QString BytesToDisplaySize(qint64 bytes); //convert into a readable size (like 50M or 50KB)
-
+
static QString SecondsToDisplay(int secs); //convert into a readable time
};
#endif
diff --git a/src-qt5/core/libLumina/LuminaSingleApplication.cpp b/src-qt5/core/libLumina/LuminaSingleApplication.cpp
index 86248666..6811d147 100644
--- a/src-qt5/core/libLumina/LuminaSingleApplication.cpp
+++ b/src-qt5/core/libLumina/LuminaSingleApplication.cpp
@@ -107,17 +107,17 @@ void LSingleApplication::PerformLockChecks(){
QLocalSocket socket(this);
socket.connectToServer(cfile);
socket.waitForConnected();
- if(!socket.isValid() || socket.state()!=QLocalSocket::ConnectedState){
+ if(!socket.isValid() || socket.state()!=QLocalSocket::ConnectedState){
//error - could not forward info for some reason
qDebug() << " - Could not connect to locking process: exiting...";
- exit(1);
- }
-
- qDebug() << " - Forwarding inputs to locking process and closing down this instance...";
+ exit(1);
+ }
+
+ qDebug() << " - Forwarding inputs to locking process and closing down this instance...";
socket.write( inputlist.join("::::").toLocal8Bit() );
socket.waitForDisconnected(500); //max out at 1/2 second (only hits this if no inputs)
}
-
+
}
//New messages detected
diff --git a/src-qt5/core/libLumina/LuminaThemes.cpp b/src-qt5/core/libLumina/LuminaThemes.cpp
index 85d43925..ddbc7b37 100644
--- a/src-qt5/core/libLumina/LuminaThemes.cpp
+++ b/src-qt5/core/libLumina/LuminaThemes.cpp
@@ -23,7 +23,7 @@
//#include "qxcbcursor.h" //needed to prod Qt to refresh the mouse cursor theme
//#include <QCursor>
-QStringList LTHEME::availableSystemThemes(){
+QStringList LTHEME::availableSystemThemes(){
//returns: [name::::path] for each item
QDir dir(LOS::LuminaShare()+"themes");
QStringList list = dir.entryList(QStringList() <<"*.qss.template", QDir::Files, QDir::Name);
@@ -31,7 +31,7 @@ QStringList LTHEME::availableSystemThemes(){
//Format the output entry [<name>::::<fullpath>]
list[i] = list[i].section(".qss.",0,0)+"::::"+dir.absoluteFilePath(list[i]);
}
- return list;
+ return list;
}
QStringList LTHEME::availableLocalThemes(){ //returns: [name::::path] for each item
@@ -52,7 +52,7 @@ QStringList LTHEME::availableSystemColors(){ //returns: [name::::path] for each
//Format the output entry [<name>::::<fullpath>]
list[i] = list[i].section(".qss.",0,0)+"::::"+dir.absoluteFilePath(list[i]);
}
- return list;
+ return list;
}
QStringList LTHEME::availableLocalColors(){ //returns: [name::::path] for each item
@@ -62,7 +62,7 @@ QStringList LTHEME::availableLocalColors(){ //returns: [name::::path] for each
//Format the output entry [<name>::::<fullpath>]
list[i] = list[i].section(".qss.",0,0)+"::::"+dir.absoluteFilePath(list[i]);
}
- return list;
+ return list;
}
QStringList LTHEME::availableSystemIcons(){ //returns: [name] for each item
@@ -72,7 +72,7 @@ QStringList LTHEME::availableSystemIcons(){ //returns: [name] for each item
xdd << QString(getenv("XDG_DATA_DIRS")).split(":");
for(int i=0; i<xdd.length(); i++){
if(QFile::exists(xdd[i]+"/icons")){
- paths << xdd[i]+"/icons";
+ paths << xdd[i]+"/icons";
}
}
//Now get all the icon themes in these directories
@@ -83,8 +83,8 @@ QStringList LTHEME::availableSystemIcons(){ //returns: [name] for each item
tmpthemes = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name);
for(int j=0; j<tmpthemes.length(); j++){
if(tmpthemes[j].startsWith("default")){ continue; }
- if(QFile::exists(dir.absoluteFilePath(tmpthemes[j]+"/index.theme")) ||
- QFile::exists(dir.absoluteFilePath(tmpthemes[j]+"/index.desktop")) ){ themes << tmpthemes[j]; }
+ if( (QFile::exists(dir.absoluteFilePath(tmpthemes[j]+"/index.theme")) ||
+ QFile::exists(dir.absoluteFilePath(tmpthemes[j]+"/index.desktop")) ) ){ themes << tmpthemes[j]; }
}
}
}
@@ -92,21 +92,32 @@ QStringList LTHEME::availableSystemIcons(){ //returns: [name] for each item
themes.sort();
return themes;
}
-
+
QStringList LTHEME::availableSystemCursors(){ //returns: [name] for each item
- QStringList paths; paths << LOS::SysPrefix()+"lib/X11/icons/" << LOS::AppPrefix()+"lib/X11/icons/";
- QStringList out;
+ QStringList paths;
+ paths << QDir::homePath()+"/.icons";
+ QStringList xdd = QString(getenv("XDG_DATA_HOME")).split(":");
+ xdd << QString(getenv("XDG_DATA_DIRS")).split(":");
+ for(int i=0; i<xdd.length(); i++){
+ if(QFile::exists(xdd[i]+"/icons")){
+ paths << xdd[i]+"/icons";
+ }
+ }
+ //Now get all the icon themes in these directories
+ QStringList themes, tmpthemes;
+ QDir dir;
for(int i=0; i<paths.length(); i++){
- if( !QFile::exists(paths[i]) ){ continue; }
- QDir dir(paths[i]);
- QStringList tmp = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name);
- for(int j=0; j<tmp.length(); j++){
- if(QFile::exists(paths[i]+tmp[j]+"/cursors")){
- out << tmp[j]; //good theme - save it to the output list
- }
+ if(dir.cd(paths[i])){
+ tmpthemes = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name);
+ for(int j=0; j<tmpthemes.length(); j++){
+ if(tmpthemes[j].startsWith("default")){ continue; }
+ if( QFile::exists(dir.absoluteFilePath(tmpthemes[j]+"/cursors")) ){ themes << tmpthemes[j]; }
+ }
}
}
- return out;
+ themes.removeDuplicates();
+ themes.sort();
+ return themes;
}
//Save a new theme/color file
@@ -119,7 +130,7 @@ bool LTHEME::saveLocalTheme(QString name, QStringList contents){
bool LTHEME::saveLocalColors(QString name, QStringList contents){
QString localdir = QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/colors/";
if(!QFile::exists(localdir)){ QDir dir; dir.mkpath(localdir); }
- return LUtils::writeFile(localdir+name+".qss.colors", contents, true);
+ return LUtils::writeFile(localdir+name+".qss.colors", contents, true);
}
//Return the currently selected Theme/Colors/Icons
@@ -129,21 +140,23 @@ QStringList LTHEME::currentSettings(){ //returns [theme path, colorspath, iconsn
for(int i=0; i<settings.length(); i++){
if(settings[i].startsWith("THEMEFILE=")){ out[0] = settings[i].section("=",1,1).simplified(); }
else if(settings[i].startsWith("COLORFILE=")){ out[1] = settings[i].section("=",1,1).simplified(); }
- else if(settings[i].startsWith("ICONTHEME=")){ out[2] = settings[i].section("=",1,1).simplified(); }
+ //else if(settings[i].startsWith("ICONTHEME=")){ out[2] = settings[i].section("=",1,1).simplified(); }
else if(settings[i].startsWith("FONTFAMILY=")){ out[3] = settings[i].section("=",1,1).simplified(); }
else if(settings[i].startsWith("FONTSIZE=")){ out[4] = settings[i].section("=",1,1).simplified(); }
}
+ QSettings engineset("lthemeengine","lthemeengine");
+ out[2]=engineset.value("Appearance/icon_theme", "material-design-light").toString();
bool nofile = settings.isEmpty();
if(out[0].isEmpty() || !QFile::exists(out[0]) ){ out[0] = LOS::LuminaShare()+"themes/Lumina-default.qss.template"; }
if(out[1].isEmpty() || !QFile::exists(out[1]) ){ out[1] = LOS::LuminaShare()+"colors/Lumina-Glass.qss.colors"; }
if(out[3].isEmpty()){ out[3] = QFont().defaultFamily(); }
- if(out[4].isEmpty()){
+ if(out[4].isEmpty()){
int num = QFont().pointSize(); out[4] = QString::number(num)+"pt"; //Check point size first
if(num<0){ num = QFont().pixelSize(); out[4] = QString::number(num)+"px";} //Now check pixel size
if(num<0){ out[4] = "9pt"; } //Now hard-code a fallback (just in case)
}
if(nofile){ setCurrentSettings(out[0], out[1], out[2], out[3], out[4]); }
-
+
return out;
}
@@ -167,8 +180,14 @@ QString LTHEME::currentCursor(){
//Change the current Theme/Colors/Icons
bool LTHEME::setCurrentSettings(QString themepath, QString colorpath, QString iconname, QString font, QString fontsize){
- QIcon::setThemeName(iconname);
- //Now save the theme settings file
+ //QIcon::setThemeName(iconname);
+ QSettings engineset("lthemeengine","lthemeengine");
+ engineset.setValue("Appearance/icon_theme", iconname);
+ //engineset.setValue("Appearance/color_scheme_path", colorpath); //re-enable this once the color scheme has been synced with lthemeengine
+ //Need to add theme path saving here too later
+
+
+ //Now save the theme settings file
QStringList contents;
contents << "THEMEFILE="+themepath;
contents << "COLORFILE="+colorpath;
@@ -195,13 +214,13 @@ bool LTHEME::setCursorTheme(QString cursorname){
bool changed = false;
QString newval = "Inherits="+cursorname;
for(int i=0; i<info.length() && !changed; i++){
- if(info[i]=="[Icon Theme]"){
+ if(info[i]=="[Icon Theme]"){
insection = true;
- }else if( info[i].startsWith("[") && insection){
+ }else if( info[i].startsWith("[") && insection){
//Section does not have the setting - add it
- info.insert(i, newval);
+ info.insert(i, newval);
changed =true;
- }else if( info[i].startsWith("[") ){
+ }else if( info[i].startsWith("[") ){
insection = false;
}else if(insection && info[i].startsWith("Inherits=")){
info[i] = newval; //replace the current setting
diff --git a/src-qt5/core/libLumina/LuminaXDG.cpp b/src-qt5/core/libLumina/LuminaXDG.cpp
index 01b3305e..ab1000ab 100644
--- a/src-qt5/core/libLumina/LuminaXDG.cpp
+++ b/src-qt5/core/libLumina/LuminaXDG.cpp
@@ -44,7 +44,7 @@ void XDGDesktop::sync(){
//Get the current localization code
type = XDGDesktop::APP; //assume this initially if we read the file properly
QString lang = QLocale::system().name(); //lang code
- QString slang = lang.section("_",0,0); //short lang code
+ QString slang = lang.section("_",0,0); //short lang code
//Now start looping over the information
XDGDesktopAction CDA; //current desktop action
bool insection=false;
@@ -53,14 +53,14 @@ void XDGDesktop::sync(){
QString line = file[i];
//if(filePath.contains("pcbsd")){ qDebug() << " - Check Line:" << line << inaction << insection; }
//Check if this is the end of a section
- if(line.startsWith("[") && inaction){
+ if(line.startsWith("[") && inaction){
insection=false; inaction=false;
//Add the current Action structure to the main desktop structure if appropriate
if(!CDA.ID.isEmpty()){ actions << CDA; CDA = XDGDesktopAction(); }
}else if(line.startsWith("[")){ insection=false; inaction = false; }
//Now check if this is the beginning of a section
if(line=="[Desktop Entry]"){ insection=true; continue; }
- else if(line.startsWith("[Desktop Action ")){
+ else if(line.startsWith("[Desktop Action ")){
//Grab the ID of the action out of the label
CDA.ID = line.section("]",0,0).section("Desktop Action",1,1).simplified();
inaction = true;
@@ -73,26 +73,26 @@ void XDGDesktop::sync(){
var = var.section("[",0,0).simplified(); //remove the localization
QString val = line.section("=",1,50).simplified();
//-------------------
- if(var=="Name"){
+ if(var=="Name"){
if(insection){
- if(name.isEmpty() && loc.isEmpty()){ name = val; }
- else if(name.isEmpty() && loc==slang){ name = val; } //short locale code
- else if(loc == lang){ name = val; }
+ if(loc==slang){ name = val;} //short locale code
+ else if(loc==lang){ name = val;}
+ else if(name.isEmpty() && loc.isEmpty()){ /*qDebug() << "Empty" << val;*/ name = val; }
}else if(inaction){
if(CDA.name.isEmpty() && loc.isEmpty()){ CDA.name = val; }
else if(CDA.name.isEmpty() && loc==slang){ CDA.name = val; } //short locale code
- else if(loc == lang){ CDA.name = val; }
+ else if(loc == lang){ CDA.name = val; }
}
//hasName = true;
- }else if(var=="GenericName" && insection){
+ }else if(var=="GenericName" && insection){
if(genericName.isEmpty() && loc.isEmpty()){ genericName = val; }
else if(genericName.isEmpty() && loc==slang){ genericName = val; } //short locale code
else if(loc == lang){ genericName = val; }
- }else if(var=="Comment" && insection){
+ }else if(var=="Comment" && insection){
if(comment.isEmpty() && loc.isEmpty()){ comment = val; }
else if(comment.isEmpty() && loc==slang){ comment = val; } //short locale code
else if(loc == lang){ comment = val; }
- }else if(var=="Icon"){
+ }else if(var=="Icon"){
if(insection){
if(icon.isEmpty() && loc.isEmpty()){ icon = val; }
else if(icon.isEmpty() && loc==slang){ icon = val; } //short locale code
@@ -107,7 +107,7 @@ void XDGDesktop::sync(){
else if(var=="Exec"){
if(insection && exec.isEmpty() ){ exec = val; }
else if(inaction && CDA.exec.isEmpty() ){ CDA.exec = val; }
- }
+ }
else if( (var=="Path") && (path.isEmpty() ) && insection){ path = val; }
else if(var=="NoDisplay" && !isHidden && insection){ isHidden = (val.toLower()=="true"); }
else if(var=="Hidden" && !isHidden && insection){ isHidden = (val.toLower()=="true"); }
@@ -117,7 +117,7 @@ void XDGDesktop::sync(){
else if(var=="Terminal" && insection){ useTerminal= (val.toLower()=="true"); }
else if(var=="Actions" && insection){ actionList = val.split(";",QString::SkipEmptyParts); }
else if(var=="MimeType" && insection){ mimeList = val.split(";",QString::SkipEmptyParts); }
- else if(var=="Keywords" && insection){
+ else if(var=="Keywords" && insection){
if(keyList.isEmpty() && loc.isEmpty()){ keyList = val.split(";",QString::SkipEmptyParts); }
else if(loc == lang){ keyList = val.split(";",QString::SkipEmptyParts); }
}
@@ -136,7 +136,7 @@ void XDGDesktop::sync(){
file.clear(); //done with contents of file
//If there are OnlyShowIn desktops listed, add them to the name
if( !showInList.isEmpty() && !showInList.contains("Lumina", Qt::CaseInsensitive) ){
- name.append(" ("+showInList.join(", ")+")");
+ name.append(" ("+showInList.join(", ")+")");
}
//Quick fix for showing "wine" applications (which quite often don't list a category, or have other differences)
if(catList.isEmpty() && filePath.contains("/wine/")){
@@ -164,7 +164,7 @@ bool XDGDesktop::isValid(bool showAll){
//if(DEBUG){ qDebug() << "[LXDG] Check File validity:" << dFile.name << dFile.filePath; }
switch (type){
case XDGDesktop::BAD:
- ok=false;
+ ok=false;
//if(DEBUG){ qDebug() << " - Bad file type"; }
break;
case XDGDesktop::APP:
@@ -182,7 +182,7 @@ bool XDGDesktop::isValid(bool showAll){
break;
default:
ok=false;
- //if(DEBUG){ qDebug() << " - Unknown file type"; }
+ //if(DEBUG){ qDebug() << " - Unknown file type"; }
}
if(!showAll){
QString cdesk = getenv("XDG_CURRENT_DESKTOP");
@@ -206,7 +206,7 @@ QString XDGDesktop::getDesktopExec(QString ActionID){
}
}
}
-
+
if(out.isEmpty()){ return ""; }
else if(useTerminal){
//Get the currently default terminal
@@ -222,7 +222,7 @@ QString XDGDesktop::getDesktopExec(QString ActionID){
}
//Now perform any of the XDG flag substitutions as appropriate (9/2014 standards)
if(out.contains("%i") && !icon.isEmpty() ){ out.replace("%i", "--icon \""+icon+"\""); }
- if(out.contains("%c")){
+ if(out.contains("%c")){
if(!name.isEmpty()){ out.replace("%c", "\""+name+"\""); }
else if(!genericName.isEmpty()){ out.replace("%c", "\""+genericName+"\""); }
else{ out.replace("%c", "\""+filePath.section("/",-1).section(".desktop",0,0)+"\""); }
@@ -250,17 +250,17 @@ QString XDGDesktop::generateExec(QStringList inputfiles, QString ActionID){
}
}
//Now to the exec replacements as needed
- if(exec.contains("%f")){
+ if(exec.contains("%f")){
if(inputfiles.isEmpty()){ exec.replace("%f",""); }
else{ exec.replace("%f", "\""+inputfiles.first()+"\""); } //Note: can only take one input
- }else if(exec.contains("%F")){
+ }else if(exec.contains("%F")){
if(inputfiles.isEmpty()){ exec.replace("%F",""); }
else{ exec.replace("%F", "\""+inputfiles.join("\" \"")+"\""); }
}
- if(exec.contains("%u")){
+ if(exec.contains("%u")){
if(inputfiles.isEmpty()){ exec.replace("%u",""); }
else{ exec.replace("%u", "\""+inputfiles.first()+"\""); } //Note: can only take one input
- }else if(exec.contains("%U")){
+ }else if(exec.contains("%U")){
if(inputfiles.isEmpty()){ exec.replace("%U",""); }
else{ exec.replace("%U", "\""+inputfiles.join("\" \"")+"\""); }
}
@@ -281,7 +281,7 @@ bool XDGDesktop::saveDesktopFile(bool merge){
info = LUtils::readFile(filePath);
//set a couple flags based on the contents before we start iterating through
// - determine if a translated field was changed (need to remove all the now-invalid translations)
- bool clearName, clearComment, clearGName;
+ bool clearName, clearComment, clearGName;
QString tmp = "";
if(!info.filter("Name=").isEmpty()){ tmp = info.filter("Name=").first().section("=",1,50); }
clearName=(tmp!=name);
@@ -294,13 +294,13 @@ bool XDGDesktop::saveDesktopFile(bool merge){
//Now start iterating through the file and changing fields as necessary
bool insection = false;
for(int i=0; i<info.length(); i++){
- if(info[i]=="[Desktop Entry]"){
- insection = true;
+ if(info[i]=="[Desktop Entry]"){
+ insection = true;
continue;
- }else if(info[i].startsWith("[")){
+ }else if(info[i].startsWith("[")){
if(insection){ insertloc = i; } //save this location for later insertions
- insection = false;
- continue;
+ insection = false;
+ continue;
}
if(!insection || info[i].isEmpty() || info[i].section("#",0,0).simplified().isEmpty()){ continue; }
QString var = info[i].section("=",0,0);
@@ -331,25 +331,25 @@ bool XDGDesktop::saveDesktopFile(bool merge){
else if(var=="OnlyShowIn"){ info[i] = var+"="+showInList.join(";"); showInList.clear(); }
else if(var=="NotShowIn"){ info[i] = var+"="+notShowInList.join(";"); notShowInList.clear(); }
else if(var=="URL"){ info[i] = var+"="+url; url.clear(); }
-
+
// --BOOLIAN VALUES--
- else if(var=="Hidden"){
+ else if(var=="Hidden"){
if(!autofile){ info.removeAt(i); i--; continue; }
else{ info[i] = var+"="+(isHidden ? "true": "false"); isHidden=false;}
- }else if(var=="NoDisplay"){
+ }else if(var=="NoDisplay"){
if(autofile){ info.removeAt(i); i--; continue; }
else{ info[i] = var+"="+(isHidden ? "true": "false"); isHidden=false;}
- }else if(var=="Terminal"){
+ }else if(var=="Terminal"){
info[i] = var+"="+(useTerminal ? "true": "false"); useTerminal=false;
- }else if(var=="StartupNotify"){
+ }else if(var=="StartupNotify"){
info[i] = var+"="+(startupNotify ? "true": "false"); startupNotify=false;
}
// Remove any lines that have been un-set or removed from the file
if(info[i].section("=",1,50).simplified().isEmpty()){ info.removeAt(i); i--; }
}
-
+
}else{
- //Just write a new file and overwrite any old one
+ //Just write a new file and overwrite any old one
// (pre-set some values here which are always required)
info << "[Desktop Entry]";
info << "Version=1.0";
@@ -357,7 +357,7 @@ bool XDGDesktop::saveDesktopFile(bool merge){
else if(type==XDGDesktop::LINK){ info << "Type=Link"; }
else if(type==XDGDesktop::DIR){ info << "Type=Dir"; }
}
-
+
if(insertloc<0){ insertloc = info.size(); }//put it at the end
//Now add in any items that did not exist in the original file
if( !exec.isEmpty() ){ info.insert(insertloc,"Exec="+exec); }
@@ -379,7 +379,7 @@ bool XDGDesktop::saveDesktopFile(bool merge){
else if(isHidden){ info.insert(insertloc,"NoDisplay=true"); }
if( useTerminal){ info.insert(insertloc,"Terminal=true"); }
if( startupNotify ){ info.insert(insertloc,"StartupNotify=true"); }
-
+
//Now save the file
return LUtils::writeFile(filePath, info, true);
}
@@ -409,7 +409,7 @@ bool XDGDesktop::setAutoStarted(bool autostart){
}
}
//Make sure the user-autostart dir is specified, and clean the app structure as necessary
- if( !filePath.startsWith(upath) && autostart){
+ if( !filePath.startsWith(upath) && autostart){
//Some other non-override autostart file - set it up to open with lumina-open
if(!filePath.endsWith(".desktop")){
exec = "lumina-open \""+filePath+"\"";
@@ -444,6 +444,39 @@ bool XDGDesktop::setAutoStarted(bool autostart){
return saved;
}
+void XDGDesktop::addToMenu(QMenu *topmenu){
+ if(!this->isValid()){ return; }
+ if(actions.isEmpty()){
+ //Just a single entry point - no extra actions
+ QAction *act = new QAction(this->name, topmenu);
+ act->setIcon(LXDG::findIcon(this->icon, ""));
+ act->setToolTip(this->comment);
+ act->setWhatsThis(this->filePath);
+ topmenu->addAction(act);
+ }else{
+ //This app has additional actions - make this a sub menu
+ // - first the main menu/action
+ QMenu *submenu = new QMenu(this->name, topmenu);
+ submenu->setIcon( LXDG::findIcon(this->icon,"") );
+ //This is the normal behavior - not a special sub-action (although it needs to be at the top of the new menu)
+ QAction *act = new QAction(this->name, submenu);
+ act->setIcon(LXDG::findIcon(this->icon, ""));
+ act->setToolTip(this->comment);
+ act->setWhatsThis(this->filePath);
+ submenu->addAction(act);
+ //Now add entries for every sub-action listed
+ for(int sa=0; sa<this->actions.length(); sa++){
+ QAction *sact = new QAction( this->actions[sa].name, this);
+ sact->setIcon(LXDG::findIcon( this->actions[sa].icon, this->icon));
+ sact->setToolTip(this->comment);
+ sact->setWhatsThis("-action \""+this->actions[sa].ID+"\" \""+this->filePath+"\"");
+ submenu->addAction(sact);
+ }
+ topmenu->addMenu(submenu);
+ }
+}
+
+
//====XDGDesktopList Functions ====
XDGDesktopList::XDGDesktopList(QObject *parent, bool watchdirs) : QObject(parent){
synctimer = new QTimer(this); //interval set automatically based on changes/interactions
@@ -462,6 +495,14 @@ XDGDesktopList::~XDGDesktopList(){
//nothing special to do here
}
+XDGDesktopList* XDGDesktopList::instance(){
+ static XDGDesktopList *APPLIST = 0;
+ if(APPLIST==0){
+ APPLIST = new XDGDesktopList(0, true);
+ }
+ return APPLIST;
+}
+
void XDGDesktopList::watcherChanged(){
if(synctimer->isActive()){ synctimer->stop(); }
synctimer->setInterval(1000); //1 second delay before check kicks off
@@ -484,7 +525,7 @@ void XDGDesktopList::updateList(){
apps = dir.entryList(QStringList() << "*.desktop",QDir::Files, QDir::Name);
for(int a=0; a<apps.length(); a++){
path = dir.absoluteFilePath(apps[a]);
- if(files.contains(path) && (files.value(path)->lastRead>QFileInfo(path).lastModified()) ){
+ if(files.contains(path) && (files.value(path)->lastRead>QFileInfo(path).lastModified()) ){
//Re-use previous data for this file (nothing changed)
found << files[path]->name; //keep track of which files were already found
}else{
@@ -503,7 +544,7 @@ void XDGDesktopList::updateList(){
} //end loop over apps
} //end loop over appDirs
//Save the extra info to the internal lists
- if(!firstrun){
+ if(!firstrun){
removedApps = oldkeys;//files which were removed
newApps = newfiles; //files which were added
}
@@ -539,6 +580,52 @@ QList<XDGDesktop*> XDGDesktopList::apps(bool showAll, bool showHidden){
return out;
}
+XDGDesktop* XDGDesktopList::findAppFile(QString filename){
+ QStringList keys = files.keys().filter(filename);
+ QString chk = filename.section("/",-1);
+ for(int i=0; i<keys.length(); i++){
+ if(keys[i] == filename || keys[i].endsWith("/"+chk)){ return files[keys[i]]; }
+ }
+ //No matches
+ return 0;
+}
+
+void XDGDesktopList::populateMenu(QMenu *topmenu, bool byCategory){
+ topmenu->clear();
+ if(byCategory){
+ QHash<QString, QList<XDGDesktop*> > APPS = LXDG::sortDesktopCats( this->apps(false,false) );
+ QStringList cats = APPS.keys();
+ cats.sort(); //make sure they are alphabetical
+ for(int i=0; i<cats.length(); i++){
+ //Make sure they are translated and have the right icons
+ QString name, icon;
+ if(cats[i]=="All"){continue; } //skip this listing for the menu
+ else if(cats[i] == "Multimedia"){ name = tr("Multimedia"); icon = "applications-multimedia"; }
+ else if(cats[i] == "Development"){ name = tr("Development"); icon = "applications-development"; }
+ else if(cats[i] == "Education"){ name = tr("Education"); icon = "applications-education"; }
+ else if(cats[i] == "Game"){ name = tr("Games"); icon = "applications-games"; }
+ else if(cats[i] == "Graphics"){ name = tr("Graphics"); icon = "applications-graphics"; }
+ else if(cats[i] == "Network"){ name = tr("Network"); icon = "applications-internet"; }
+ else if(cats[i] == "Office"){ name = tr("Office"); icon = "applications-office"; }
+ else if(cats[i] == "Science"){ name = tr("Science"); icon = "applications-science"; }
+ else if(cats[i] == "Settings"){ name = tr("Settings"); icon = "preferences-system"; }
+ else if(cats[i] == "System"){ name = tr("System"); icon = "applications-system"; }
+ else if(cats[i] == "Utility"){ name = tr("Utility"); icon = "applications-utilities"; }
+ else if(cats[i] == "Wine"){ name = tr("Wine"); icon = "wine"; }
+ else{ name = tr("Unsorted"); icon = "applications-other"; }
+
+ QMenu *menu = new QMenu(name, topmenu);
+ menu->setIcon(LXDG::findIcon(icon,""));
+ QList<XDGDesktop*> appL = APPS.value(cats[i]);
+ for( int a=0; a<appL.length(); a++){ appL[a]->addToMenu(menu); }
+ topmenu->addMenu(menu);
+ } //end loop over cats
+ }else{
+ QList<XDGDesktop*> APPS = this->apps(false, false);
+ for(int i=0; i<APPS.length(); i++){ APPS[i]->addToMenu(topmenu); }
+ }
+}
+
//==== LFileInfo Functions ====
//Need some extra information not usually available by a QFileInfo
void LFileInfo::loadExtraInfo(){
@@ -617,7 +704,14 @@ XDGDesktop* LFileInfo::XDG(){
return desk;
}
-// -- Check if this is a readable image file (for thumbnail support)
+// -- Check if this is a readable video file (for thumbnail support)
+bool LFileInfo::isVideo(){
+ if(!mime.startsWith("video/")){ return false; }
+ //Check the hardcoded list of known supported video formats to see if the thumbnail can be generated
+ return ( !LUtils::videoExtensions().filter(this->suffix().toLower()).isEmpty() );
+}
+
+// -- Check if this is a readable image file
bool LFileInfo::isImage(){
if(!mime.startsWith("image/")){ return false; } //quick return for non-image files
//Check the Qt subsystems to see if this image file can be read
diff --git a/src-qt5/core/libLumina/LuminaXDG.h b/src-qt5/core/libLumina/LuminaXDG.h
index cc250c7e..0f7e7c48 100644
--- a/src-qt5/core/libLumina/LuminaXDG.h
+++ b/src-qt5/core/libLumina/LuminaXDG.h
@@ -28,7 +28,8 @@
#include <QTextStream>
#include <QDateTime>
#include <QDebug>
-
+#include <QMenu>
+#include <QAction>
// ======================
// FreeDesktop Desktop Actions Framework (data structure)
@@ -82,6 +83,9 @@ public:
bool saveDesktopFile(bool merge = true); //This will use the "filePath" variable for where to save the file
bool setAutoStarted(bool autostart = true);
+
+ //Create a menu entry for this application
+ void addToMenu(QMenu*);
};
// ========================
@@ -93,8 +97,13 @@ public:
//Functions
XDGDesktopList(QObject *parent = 0, bool watchdirs = false);
~XDGDesktopList();
+
+ static XDGDesktopList* instance();
+
//Main Interface functions
QList<XDGDesktop*> apps(bool showAll, bool showHidden); //showAll: include invalid files, showHidden: include NoShow/Hidden files
+ XDGDesktop* findAppFile(QString filename);
+ void populateMenu(QMenu *, bool byCategory = true);
//Administration variables (not typically used directly)
QDateTime lastCheck;
@@ -150,6 +159,7 @@ public:
//Other file type identification routines
bool isImage(); //Is a readable image file (for thumbnail support)
+ bool isVideo(); //Is a readable video file (for thumbnail support)
bool isAVFile(); //Is an audio/video file
};
typedef QList<LFileInfo> LFileInfoList;
diff --git a/src-qt5/core/libLumina/NativeEmbedWidget.cpp b/src-qt5/core/libLumina/NativeEmbedWidget.cpp
index 487d1040..876c701d 100644
--- a/src-qt5/core/libLumina/NativeEmbedWidget.cpp
+++ b/src-qt5/core/libLumina/NativeEmbedWidget.cpp
@@ -8,31 +8,75 @@
#include <QPainter>
#include <QX11Info>
+#include <QApplication>
+#include <QScreen>
#include <QDebug>
#include <xcb/xproto.h>
#include <xcb/xcb_aux.h>
+#include <xcb/xcb_event.h>
#include <xcb/xcb_image.h>
+//#include <xcb/render.h>
+//#include <xcb/xcb_renderutil.h>
#include <xcb/composite.h>
#include <X11/extensions/Xdamage.h>
#define DISABLE_COMPOSITING true
-#define NORMAL_WIN_EVENT_MASK (XCB_EVENT_MASK_BUTTON_PRESS | \
- XCB_EVENT_MASK_BUTTON_RELEASE | \
- XCB_EVENT_MASK_POINTER_MOTION | \
- XCB_EVENT_MASK_BUTTON_MOTION | \
- XCB_EVENT_MASK_EXPOSURE | \
- XCB_EVENT_MASK_STRUCTURE_NOTIFY | \
- XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | \
- XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | \
- XCB_EVENT_MASK_ENTER_WINDOW| \
- XCB_EVENT_MASK_PROPERTY_CHANGE)
+/*inline xcb_render_pictformat_t get_pictformat(){
+ static xcb_render_pictformat_t format = 0;
+ if(format==0){
+ xcb_render_query_pict_formats_reply_t *reply = xcb_render_query_pict_formats_reply( QX11Info::connection(), xcb_render_query_pict_formats(QX11Info::connection()), NULL);
+ format = xcb_render_util_find_standard_format(reply, XCB_PICT_STANDARD_ARGB_32)->id;
+ free(reply);
+ }
+ return format;
+}
+
+inline void renderWindowToWidget(WId id, QWidget *widget, bool hastransparency = true){
+ //window and widget are assumed to be the same size
+ //Pull the XCB pixmap out of the compositing layer
+ xcb_pixmap_t pix = xcb_generate_id(QX11Info::connection());
+ xcb_composite_name_window_pixmap(QX11Info::connection(), WIN->id(), pix);
+ if(pix==0){ qDebug() << "Got blank pixmap!"; return; }
-inline void registerClientEvents(WId id){
- uint32_t value_list[1] = {NORMAL_WIN_EVENT_MASK};
- xcb_change_window_attributes(QX11Info::connection(), id, XCB_CW_EVENT_MASK, value_list);
+ xcb_render_picture_t pic_id = xcb_generate_id(QX11Info::connection());
+ xcb_render_create_picture_aux(QX11Info::connection(), pic_id, pix, get_pictformat() , 0, NULL);
+ //
+ xcb_render_composite(QX11Info::connection(), hastransparency ? XCB_RENDER_PICT_OP_OVER : XCB_RENDER_PICT_OP_SRC, pic_id, XCB_RENDER_PICTURE_NONE, widget->x11RenderHandle(),
+ 0, 0, 0, 0, 0, 0, (uint16_t) widget->width(), (uint16_t) widget->height() );
+}*/
+
+#define CLIENT_EVENT_MASK (XCB_EVENT_MASK_PROPERTY_CHANGE | \
+ XCB_EVENT_MASK_STRUCTURE_NOTIFY | \
+ XCB_EVENT_MASK_FOCUS_CHANGE | \
+ XCB_EVENT_MASK_POINTER_MOTION)
+
+#define FRAME_EVENT_MASK (XCB_EVENT_MASK_BUTTON_PRESS | \
+ XCB_EVENT_MASK_BUTTON_RELEASE | \
+ XCB_EVENT_MASK_POINTER_MOTION | \
+ XCB_EVENT_MASK_EXPOSURE | \
+ XCB_EVENT_MASK_STRUCTURE_NOTIFY | \
+ XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | \
+ XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | \
+ XCB_EVENT_MASK_ENTER_WINDOW)
+
+inline void registerClientEvents(WId id, bool client = true){
+ uint32_t values[] = {XCB_NONE};
+ values[0] = client ? CLIENT_EVENT_MASK : FRAME_EVENT_MASK ;
+ /*{ (XCB_EVENT_MASK_PROPERTY_CHANGE
+ | XCB_EVENT_MASK_BUTTON_PRESS
+ | XCB_EVENT_MASK_BUTTON_RELEASE
+ | XCB_EVENT_MASK_POINTER_MOTION
+ | XCB_EVENT_MASK_BUTTON_MOTION
+ | XCB_EVENT_MASK_EXPOSURE
+ | XCB_EVENT_MASK_STRUCTURE_NOTIFY
+ | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT
+ | XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY
+ | XCB_EVENT_MASK_ENTER_WINDOW)
+ };*/
+ xcb_change_window_attributes(QX11Info::connection(), id, XCB_CW_EVENT_MASK, values);
}
// ============
@@ -40,12 +84,14 @@ inline void registerClientEvents(WId id){
// ============
//Simplification functions for the XCB/XLib interactions
void NativeEmbedWidget::syncWinSize(QSize sz){
- if(WIN==0 ){ return; }
+ if(WIN==0){ return; }
else if(!sz.isValid()){ sz = this->size(); } //use the current widget size
//qDebug() << "Sync Window Size:" << sz;
- if(sz == winSize){ return; } //no change
- const uint32_t valList[2] = {(uint32_t) sz.width(), (uint32_t) sz.height()};
- const uint32_t mask = XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT;
+ //if(sz == winSize){ return; } //no change
+ QPoint pt(0,0);
+ if(!DISABLE_COMPOSITING){ pt = this->mapToGlobal(QPoint(0,0)); }
+ const uint32_t valList[4] = {(uint32_t) pt.x(), (uint32_t) pt.y(), (uint32_t) sz.width(), (uint32_t) sz.height()};
+ const uint32_t mask = XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y | XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT;
xcb_configure_window(QX11Info::connection(), WIN->id(), mask, valList);
winSize = sz; //save this for checking later
}
@@ -56,47 +102,72 @@ void NativeEmbedWidget::syncWidgetSize(QSize sz){
}
void NativeEmbedWidget::hideWindow(){
+ //qDebug() << "Hide Embed Window";
xcb_unmap_window(QX11Info::connection(), WIN->id());
}
void NativeEmbedWidget::showWindow(){
+ //qDebug() << "Show Embed Window";
xcb_map_window(QX11Info::connection(), WIN->id());
- QTimer::singleShot(0,this, SLOT(repaintWindow()));
+ reregisterEvents();
+ if(!DISABLE_COMPOSITING){
+ QTimer::singleShot(0,this, SLOT(repaintWindow()));
+ }
}
QImage NativeEmbedWidget::windowImage(QRect geom){
- //Pull the XCB pixmap out of the compositing layer
- xcb_pixmap_t pix = xcb_generate_id(QX11Info::connection());
- xcb_composite_name_window_pixmap(QX11Info::connection(), WIN->id(), pix);
- if(pix==0){ qDebug() << "Got blank pixmap!"; return QImage(); }
-
- //Convert this pixmap into a QImage
- xcb_image_t *ximg = xcb_image_get(QX11Info::connection(), pix, geom.x(), geom.y(), geom.width(), geom.height(), ~0, XCB_IMAGE_FORMAT_Z_PIXMAP);
- if(ximg == 0){ qDebug() << "Got blank image!"; return QImage(); }
- QImage img(ximg->data, ximg->width, ximg->height, ximg->stride, QImage::Format_ARGB32_Premultiplied);
- img = img.copy(); //detach this image from the XCB data structures
- xcb_image_destroy(ximg);
+ if(DISABLE_COMPOSITING){
+ QList<QScreen*> screens = static_cast<QApplication*>( QApplication::instance() )->screens();
+ //for(int i=0; i<screens.length(); i++){
+ //if(screens[i]->contains(this)){
+ if(!screens.isEmpty()){
+ return screens[0]->grabWindow(WIN->id(), geom.x(), geom.y(), geom.width(), geom.height()).toImage();
+ }
+ //}
+ //}
+ return QImage();
+ }else{
+ //Pull the XCB pixmap out of the compositing layer
+ xcb_pixmap_t pix = xcb_generate_id(QX11Info::connection());
+ xcb_composite_name_window_pixmap(QX11Info::connection(), WIN->id(), pix);
+ if(pix==0){ qDebug() << "Got blank pixmap!"; return QImage(); }
- //Cleanup the XCB data structures
- xcb_free_pixmap(QX11Info::connection(), pix);
+ //Convert this pixmap into a QImage
+ //xcb_image_t *ximg = xcb_image_get(QX11Info::connection(), pix, 0, 0, this->width(), this->height(), ~0, XCB_IMAGE_FORMAT_Z_PIXMAP);
+ xcb_image_t *ximg = xcb_image_get(QX11Info::connection(), pix, geom.x(), geom.y(), geom.width(), geom.height(), ~0, XCB_IMAGE_FORMAT_Z_PIXMAP);
+ if(ximg == 0){ qDebug() << "Got blank image!"; return QImage(); }
+ QImage img(ximg->data, ximg->width, ximg->height, ximg->stride, QImage::Format_ARGB32_Premultiplied);
+ img = img.copy(); //detach this image from the XCB data structures before we clean them up, otherwise the QImage will try to clean it up a second time on window close and crash
+ xcb_image_destroy(ximg);
- return img;
+ //Cleanup the XCB data structures
+ xcb_free_pixmap(QX11Info::connection(), pix);
+ return img;
+ }
+}
+void NativeEmbedWidget::setWinUnpaused(){
+ paused = false;
+ winImage = QImage();
+ if(!DISABLE_COMPOSITING){
+ repaintWindow(); //update the cached image right away
+ }else if(this->isVisible()){
+ showWindow();
+ }
}
-
// ============
// PUBLIC
// ============
NativeEmbedWidget::NativeEmbedWidget(QWidget *parent) : QWidget(parent){
WIN = 0; //nothing embedded yet
paused = false;
+ this->setMouseTracking(true);
//this->setSizeIncrement(2,2);
}
bool NativeEmbedWidget::embedWindow(NativeWindow *window){
WIN = window;
- //PIXBACK = xcb_generate_id(QX11Info::connection());
- xcb_reparent_window(QX11Info::connection(), WIN->id(), this->winId(), 0, 0);
+
//Now send the embed event to the app
//qDebug() << " - send _XEMBED event";
/*xcb_client_message_event_t event;
@@ -115,7 +186,7 @@ bool NativeEmbedWidget::embedWindow(NativeWindow *window){
//Now setup any redirects and return
if(!DISABLE_COMPOSITING){
xcb_composite_redirect_window(QX11Info::connection(), WIN->id(), XCB_COMPOSITE_REDIRECT_MANUAL); //XCB_COMPOSITE_REDIRECT_[MANUAL/AUTOMATIC]);
- xcb_composite_redirect_subwindows(QX11Info::connection(), WIN->id(), XCB_COMPOSITE_REDIRECT_MANUAL); //XCB_COMPOSITE_REDIRECT_[MANUAL/AUTOMATIC]);
+ xcb_composite_redirect_subwindows(QX11Info::connection(), WIN->id(), XCB_COMPOSITE_REDIRECT_MANUAL); //AUTOMATIC); //XCB_COMPOSITE_REDIRECT_[MANUAL/AUTOMATIC]);
//Now create/register the damage handler
// -- XCB (Note: The XCB damage registration is completely broken at the moment - 9/15/15, Ken Moore)
@@ -126,19 +197,27 @@ bool NativeEmbedWidget::embedWindow(NativeWindow *window){
Damage dmgID = XDamageCreate(QX11Info::display(), WIN->id(), XDamageReportRawRectangles);
WIN->addDamageID( (uint) dmgID); //save this for later
+ connect(WIN, SIGNAL(VisualChanged()), this, SLOT(repaintWindow()) ); //make sure we repaint the widget on visual change
+ }else{
+ xcb_reparent_window(QX11Info::connection(), WIN->id(), this->winId(), 0, 0);
+ registerClientEvents(this->winId()); //child events get forwarded through the frame - watch this for changes too
+ //Also use a partial-composite here - make sure the window pixmap is available even when the window is obscured
+ xcb_composite_redirect_window(QX11Info::connection(), WIN->id(), XCB_COMPOSITE_REDIRECT_AUTOMATIC);
+ //Also alert us when the window visual changes
+ Damage dmgID = XDamageCreate(QX11Info::display(), WIN->id(), XDamageReportRawRectangles);
+
+ WIN->addDamageID( (uint) dmgID); //save this for later
+ connect(WIN, SIGNAL(VisualChanged()), this, SLOT(repaintWindow()) ); //make sure we repaint the widget on visual change
}
WIN->addFrameWinID(this->winId());
- connect(WIN, SIGNAL(VisualChanged()), this, SLOT(repaintWindow()) ); //make sure we repaint the widget on visual change
-
registerClientEvents(WIN->id());
- registerClientEvents(this->winId());
- qDebug() << "Events Registered:" << WIN->id() << this->winId();
+ //qDebug() << "Events Registered:" << WIN->id() << this->winId();
return true;
}
bool NativeEmbedWidget::detachWindow(){
xcb_reparent_window(QX11Info::connection(), WIN->id(), QX11Info::appRootWindow(), -1, -1);
- WIN = 0;
+ //WIN = 0;
return true;
}
@@ -146,69 +225,94 @@ bool NativeEmbedWidget::isEmbedded(){
return (WIN!=0);
}
+void NativeEmbedWidget::raiseWindow(){
+ if(DISABLE_COMPOSITING){ return; }
+ uint32_t val = XCB_STACK_MODE_ABOVE;
+ xcb_configure_window(QX11Info::connection(), WIN->id(), XCB_CONFIG_WINDOW_STACK_MODE, &val);
+}
+
+void NativeEmbedWidget::lowerWindow(){
+ if(DISABLE_COMPOSITING){ return; }
+ uint32_t val = XCB_STACK_MODE_BELOW;
+ xcb_configure_window(QX11Info::connection(), WIN->id(), XCB_CONFIG_WINDOW_STACK_MODE, &val);
+}
+
// ==============
// PUBLIC SLOTS
// ==============
//Pause/resume
void NativeEmbedWidget::pause(){
- if(winImage.isNull()){ repaintWindow(); } //make sure we have one image already cached first
+ if(DISABLE_COMPOSITING){
+ winImage = windowImage(QRect(QPoint(0,0), this->size()));
+ hideWindow();
+ }else{
+ if(winImage.isNull()){ repaintWindow(); } //make sure we have one image already cached first
+ }
paused = true;
}
void NativeEmbedWidget::resume(){
- paused = false;
- //syncWinSize();
- //showWindow();
- repaintWindow(); //update the cached image right away
+ //paused = false;
+ syncWinSize();
+ if(DISABLE_COMPOSITING){
+ //showWindow();
+ }else{
+ repaintWindow(); //update the cached image right away
+ }
+ QTimer::singleShot(10, this, SLOT(setWinUnpaused()) );
}
void NativeEmbedWidget::resyncWindow(){
if(WIN==0){ return; }
- /*return; //skip the stuff below (not working)
- QRect geom = WIN->geometry();
- //Send an artificial configureNotify event to the window with the global position/size included
- xcb_configure_notify_event_t event;
- event.x = geom.x() + this->pos().x();
- event.y = geom.y() + this->pos().y();
- event.width = this->width();
- event.height = this->height();
- event.border_width = 0;
- event.above_sibling = XCB_NONE;
- event.override_redirect = false;
- event.window = WIN->id();
- event.event = WIN->id();
- event.response_type = XCB_CONFIGURE_NOTIFY;
- xcb_send_event(QX11Info::connection(), false, WIN->id(), XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY, (const char *) &event);
- */
- //Just jitter the window size by 1 pixel really quick so the window knows to update it's geometry
- QSize sz = this->size();
- uint32_t valList[2] = {(uint32_t) sz.width()-1, (uint32_t) sz.height()};
- uint32_t mask = XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT;
- xcb_configure_window(QX11Info::connection(), WIN->id(), mask, valList);
- xcb_flush(QX11Info::connection());
- valList[0] = (uint32_t) sz.width();
- xcb_configure_window(QX11Info::connection(), WIN->id(), mask, valList);
- xcb_flush(QX11Info::connection());
syncWinSize();
- QTimer::singleShot(10, this, SLOT(repaintWindow()) );
+ if(DISABLE_COMPOSITING){
+ // Specs say to send an artificial configure event to the window if the window was reparented into the frame
+ QPoint loc = this->mapToGlobal( QPoint(0,0));
+ //Send an artificial configureNotify event to the window with the global position/size included
+ xcb_configure_notify_event_t *event = (xcb_configure_notify_event_t*) calloc(32,1); //always 32-byes long, even if we don't need all of it
+ event->x = loc.x();
+ event->y = loc.y();
+ event->width = this->width();
+ event->height = this->height();
+ event->border_width = 0;
+ event->above_sibling = XCB_NONE;
+ event->override_redirect = false;
+ event->window = WIN->id();
+ event->event = WIN->id();
+ event->response_type = XCB_CONFIGURE_NOTIFY;
+ xcb_send_event(QX11Info::connection(), false, WIN->id(), XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY, (char *) event);
+ xcb_flush(QX11Info::connection());
+ free(event);
+ }else{
+ //Window is floating invisibly - make sure it is in the right place
+ //Make sure the window size is syncronized and visual up to date
+ //syncWinSize();
+ QTimer::singleShot(10, this, SLOT(repaintWindow()) );
+ }
+
}
void NativeEmbedWidget::repaintWindow(){
- if(DISABLE_COMPOSITING){ return; }
+ //if(DISABLE_COMPOSITING){ return; }
//qDebug() << "Update Window Image:" << !paused;
if(paused){ return; }
- QImage tmp = windowImage( QRect(QPoint(0,0), this->size()) );
+ /*QImage tmp = windowImage( QRect(QPoint(0,0), this->size()) );
if(!tmp.isNull()){
winImage = tmp;
- }else{ qDebug() << "Got Null Image!!"; }
- this->parentWidget()->update();
+ }else{ qDebug() << "Got Null Image!!"; }*/
+ this->parentWidget()->update(); //visual changed - need to update the image on the widget
+}
+
+void NativeEmbedWidget::reregisterEvents(){
+ if(WIN!=0){ registerClientEvents(WIN->id()); }
}
+
// ==============
// PROTECTED
// ==============
void NativeEmbedWidget::resizeEvent(QResizeEvent *ev){
QWidget::resizeEvent(ev);
- if(WIN!=0){
+ if(WIN!=0 && !paused){
syncWinSize(ev->size());
} //syncronize the window with the new widget size
}
@@ -224,30 +328,106 @@ void NativeEmbedWidget::hideEvent(QHideEvent *ev){
}
void NativeEmbedWidget::paintEvent(QPaintEvent *ev){
- if(WIN==0 || DISABLE_COMPOSITING){ QWidget::paintEvent(ev); return; }
- else if( winImage.isNull() ){ /*QTimer::singleShot(0, this, SLOT(repaintWindow()) );*/ return; }
- else if(paused){ return; }
- //else if(this->size()!=winSize){ QTimer::singleShot(0,this, SLOT(syncWinSize())); return; } //do not paint here - waiting to re-sync the sizes
- //else if(this->size() != winImage.size()){ QTimer::singleShot(0, this, SLOT(repaintWindow()) ); return; }
- //Need to paint the image from the window onto the widget as an overlay
+ if(WIN==0){ return; }
QRect geom = ev->rect(); //atomic updates
- geom.adjust(-10,-10,10,10); //add an additional few pixels in each direction to be painted
- geom = geom.intersected(QRect(0,0,this->width(), this->height())); //ensure intersection with actual window
- if( !QRect(QPoint(0,0),winImage.size()).contains(geom) ){ QTimer::singleShot(0,this, SLOT(repaintWindow()) );return; }
+ //qDebug() << "Paint Rect:" << geom;
+ //geom.adjust(-10,-10,10,10); //add an additional few pixels in each direction to be painted
+ //geom = geom.intersected(QRect(0,0,this->width(), this->height())); //ensure intersection with actual window
+ QImage img;
+ if(!paused){ img = windowImage(geom); }
+ else if(!winImage.isNull()){
+ if(winImage.size() == this->size()){ img = winImage.copy(geom); }
+ else{ img = winImage.scaled(geom.size()); } //this is a fast transformation - might be slightly distorted
+ }
+ //Need to paint the image from the window onto the widget as an overlay
+
QPainter P(this);
P.setClipping(true);
P.setClipRect(0,0,this->width(), this->height());
+ if(DISABLE_COMPOSITING){ P.fillRect(geom, Qt::black); } //get weird effects when partial-compositing is enabled if you layer transparent window frames above other windows
//qDebug() << "Paint Embed Window:" << geom << winImage.size();
- if(winImage.size() == this->size()){
- P.drawImage( geom , winImage, geom, Qt::NoOpaqueDetection); //1-to-1 mapping
+ //if(winImage.size() == this->size()){
+ P.drawImage( geom , img, QRect(QPoint(0,0), img.size()), Qt::NoOpaqueDetection); //1-to-1 mapping
//Note: Qt::NoOpaqueDetection Speeds up the paint by bypassing the checks to see if there are [semi-]transparent pixels
// Since this is an embedded image - we fully expect there to be transparency all/most of the time.
- }else{
- P.drawImage( geom , winImage);
- }
+ // }else{
+ //P.drawImage( geom , winImage); //auto-scale it to fit (transforming a static image while paused?)
+ // }
//else{ QImage scaled = winImage.scaled(geom.size()); P.drawImage(geom, scaled); }
//P.drawImage( geom , winImage, geom, Qt::NoOpaqueDetection); //1-to-1 mapping
//Note: Qt::NoOpaqueDetection Speeds up the paint by bypassing the checks to see if there are [semi-]transparent pixels
// Since this is an embedded image - we fully expect there to be transparency all/most of the time.
}
+
+void NativeEmbedWidget::enterEvent(QEvent *ev){
+ QWidget::enterEvent(ev);
+ //qDebug() << "Enter Embed Widget";
+ //raiseWindow(); //this->grabMouse();
+}
+
+void NativeEmbedWidget::leaveEvent(QEvent *ev){
+ QWidget::leaveEvent(ev);
+ /*qDebug() << "Leave Embed Widget";
+ QPoint pt = QCursor::pos();
+ QPoint relpt = this->parentWidget()->mapFromGlobal(pt);
+ qDebug() << " - Geom:" << this->geometry() << "Global pt:" << pt << "Relative pt:" << relpt;
+ if(!this->geometry().contains(relpt) ){ lowerWindow(); }*/
+}
+
+void NativeEmbedWidget::mouseMoveEvent(QMouseEvent *ev){
+ QWidget::mouseMoveEvent(ev);
+ //Forward this event on to the window
+}
+
+void NativeEmbedWidget::mousePressEvent(QMouseEvent *ev){
+ QWidget::mousePressEvent(ev);
+ //Forward this event on to the window
+}
+
+void NativeEmbedWidget::mouseReleaseEvent(QMouseEvent *ev){
+ QWidget::mouseReleaseEvent(ev);
+ //Forward this event on to the window
+}
+
+/*bool NativeEmbedWidget::nativeEvent(const QByteArray &eventType, void *message, long *result){
+ if(eventType=="xcb_generic_event_t" && WIN!=0){
+ //Convert to known event type (for X11 systems)
+ xcb_generic_event_t *ev = static_cast<xcb_generic_event_t *>(message);
+ //qDebug() << "Got Embed Window Event:" << xcb_event_get_label(ev->response_type & XCB_EVENT_RESPONSE_TYPE_MASK) << xcb_event_get_request_label(ev->response_type);
+ uint32_t mask = 0;
+ switch( ev->response_type & XCB_EVENT_RESPONSE_TYPE_MASK){
+ case XCB_BUTTON_PRESS:
+ //This is a mouse button press
+ mask = XCB_EVENT_MASK_BUTTON_PRESS;
+ break;
+ case XCB_BUTTON_RELEASE:
+ //This is a mouse button release
+ //qDebug() << "Button Release Event";
+ mask = XCB_EVENT_MASK_BUTTON_RELEASE;
+ break;
+ case XCB_MOTION_NOTIFY:
+ //This is a mouse movement event
+ mask = XCB_EVENT_MASK_POINTER_MOTION;
+ break;
+ case XCB_ENTER_NOTIFY:
+ //This is a mouse movement event when mouse goes over a new window
+ mask = XCB_EVENT_MASK_ENTER_WINDOW;
+ break;
+ case XCB_LEAVE_NOTIFY:
+ //This is a mouse movement event when mouse goes leaves a window
+ mask = XCB_EVENT_MASK_LEAVE_WINDOW;
+ break;
+ default:
+ mask = 0;
+ }
+
+ //Now forward this event on to the embedded window
+ if(mask!=0){
+ qDebug() << " - Got a mouse event";
+ xcb_send_event(QX11Info::connection(), true, WIN->id(),mask, (char*) ev);
+ return true;
+ }
+ }
+ return false;
+}*/
diff --git a/src-qt5/core/libLumina/NativeEmbedWidget.h b/src-qt5/core/libLumina/NativeEmbedWidget.h
index 65e03c51..16bb46dc 100644
--- a/src-qt5/core/libLumina/NativeEmbedWidget.h
+++ b/src-qt5/core/libLumina/NativeEmbedWidget.h
@@ -18,6 +18,7 @@
#include <QShowEvent>
#include <QHideEvent>
#include <QPaintEvent>
+#include <QMouseEvent>
class NativeEmbedWidget : public QWidget{
Q_OBJECT
@@ -25,7 +26,7 @@ private:
NativeWindow *WIN;
QSize winSize;
QImage winImage;
- bool paused;
+ bool paused, hasAlphaChannel;
private slots:
//Simplification functions
@@ -35,6 +36,7 @@ private slots:
void showWindow();
QImage windowImage(QRect geom);
+ void setWinUnpaused();
public:
NativeEmbedWidget(QWidget *parent);
@@ -42,22 +44,31 @@ public:
bool embedWindow(NativeWindow *window);
bool detachWindow();
bool isEmbedded(); //status of the embed
-
-
+ bool isPaused(){ return paused; }
public slots:
+ void raiseWindow();
+ void lowerWindow();
+
//Pause/resume
void pause();
void resume();
void resyncWindow();
void repaintWindow();
+ void reregisterEvents();
protected:
void resizeEvent(QResizeEvent *ev);
void showEvent(QShowEvent *ev);
void hideEvent(QHideEvent *ev);
void paintEvent(QPaintEvent *ev);
+ void enterEvent(QEvent *ev);
+ void leaveEvent(QEvent *ev);
+ void mouseMoveEvent(QMouseEvent *ev);
+ void mousePressEvent(QMouseEvent *ev);
+ void mouseReleaseEvent(QMouseEvent *ev);
+ //bool nativeEvent(const QByteArray &eventType, void *message, long *result);
};
#endif
diff --git a/src-qt5/core/libLumina/NativeEventFilter.cpp b/src-qt5/core/libLumina/NativeEventFilter.cpp
index 354dbe76..c13c1fc8 100644
--- a/src-qt5/core/libLumina/NativeEventFilter.cpp
+++ b/src-qt5/core/libLumina/NativeEventFilter.cpp
@@ -65,7 +65,7 @@ static xcb_ewmh_connection_t EWMH;
static xcb_atom_t _NET_SYSTEM_TRAY_OPCODE = 0;
inline void ParsePropertyEvent(xcb_property_notify_event_t *ev, NativeEventFilter *obj){
- qDebug() << "Got Property Event:" << ev->window << ev->atom;
+ //qDebug() << "Got Property Event:" << ev->window << ev->atom;
NativeWindow::Property prop = NativeWindow::None;
//Now determine which properties are getting changed, and update the native window as appropriate
if(ev->atom == EWMH._NET_WM_NAME){ prop = NativeWindow::Title; }
@@ -76,11 +76,14 @@ inline void ParsePropertyEvent(xcb_property_notify_event_t *ev, NativeEventFilte
else if( ev->atom == EWMH._NET_WM_STATE){ prop = NativeWindow::States; }
//Send out the signal if necessary
if(prop!=NativeWindow::None){
- //if(DEBUG){
- qDebug() << "Detected Property Change:" << ev->window << prop;
+ //if(DEBUG){
+ //qDebug() << "Detected Property Change:" << ev->window << prop;
//}
obj->emit WindowPropertyChanged(ev->window, prop);
}else{
+ //Quick re-check of the simple properties (nothing like the icon or other graphics)
+ obj->emit WindowPropertiesChanged(ev->window, QList<NativeWindow::Property>() << NativeWindow::Title
+ << NativeWindow::ShortTitle << NativeWindow::Workspace );
//qDebug() << "Unknown Property Change:" << ev->window << ev->atom;
}
}
@@ -98,7 +101,7 @@ inline void ParseClientMessageEvent(xcb_client_message_event_t *ev, NativeEventF
else if(ev->type==EWMH._NET_WM_STATE){ prop = NativeWindow::States; }
if(prop!=NativeWindow::None){
- //if(DEBUG){
+ //if(DEBUG){
qDebug() << "Detected Property Change Request:" << ev->window << prop; //}
if(val.isNull()){ obj->emit WindowPropertyChanged(ev->window, prop); }
else{ obj->emit RequestWindowPropertyChange(ev->window, prop, val); }
diff --git a/src-qt5/core/libLumina/NativeEventFilter.h b/src-qt5/core/libLumina/NativeEventFilter.h
index 2b184f99..a3be3ef1 100644
--- a/src-qt5/core/libLumina/NativeEventFilter.h
+++ b/src-qt5/core/libLumina/NativeEventFilter.h
@@ -34,6 +34,7 @@ signals:
void WindowCreated(WId);
void WindowDestroyed(WId);
void WindowPropertyChanged(WId, NativeWindow::Property);
+ void WindowPropertiesChanged(WId, QList<NativeWindow::Property>);
void WindowPropertyChanged(WId, NativeWindow::Property, QVariant);
void WindowPropertiesChanged(WId, QList<NativeWindow::Property>, QList<QVariant>);
void RequestWindowPropertyChange(WId, NativeWindow::Property, QVariant);
diff --git a/src-qt5/core/libLumina/NativeWindow.cpp b/src-qt5/core/libLumina/NativeWindow.cpp
index 3c76ed00..02cc001e 100644
--- a/src-qt5/core/libLumina/NativeWindow.cpp
+++ b/src-qt5/core/libLumina/NativeWindow.cpp
@@ -106,6 +106,10 @@ QRect NativeWindow::geometry(){
return geom;
}
// ==== PUBLIC SLOTS ===
+void NativeWindow::toggleVisibility(){
+ setProperty(NativeWindow::Visible, !property(NativeWindow::Visible).toBool() );
+}
+
void NativeWindow::requestClose(){
emit RequestClose(winid);
}
diff --git a/src-qt5/core/libLumina/NativeWindow.h b/src-qt5/core/libLumina/NativeWindow.h
index d04815ce..67436259 100644
--- a/src-qt5/core/libLumina/NativeWindow.h
+++ b/src-qt5/core/libLumina/NativeWindow.h
@@ -78,6 +78,7 @@ public:
QRect geometry(); //this returns the "full" geometry of the window (window + frame)
public slots:
+ void toggleVisibility();
void requestClose(); //ask the app to close the window (may/not depending on activity)
void requestKill(); //ask the WM to kill the app associated with this window (harsh - only use if not responding)
void requestPing(); //ask the app if it is still active (a WindowNotResponding signal will get sent out if there is no reply);
diff --git a/src-qt5/core/libLumina/NativeWindow.pri b/src-qt5/core/libLumina/NativeWindow.pri
index c2ac0137..c906d6fd 100644
--- a/src-qt5/core/libLumina/NativeWindow.pri
+++ b/src-qt5/core/libLumina/NativeWindow.pri
@@ -2,6 +2,7 @@
# Files
QT *= x11extras
LIBS *= -lc -lxcb -lxcb-ewmh -lxcb-icccm -lxcb-image -lxcb-composite -lxcb-damage -lxcb-util -lxcb-keysyms -lXdamage
+#QT *= -lxcb-render -lxcb-render-util
SOURCES *= $${PWD}/NativeWindow.cpp \
$${PWD}/NativeWindowSystem.cpp \
diff --git a/src-qt5/core/libLumina/NativeWindowSystem.cpp b/src-qt5/core/libLumina/NativeWindowSystem.cpp
index 71e95a0e..0ee65929 100644
--- a/src-qt5/core/libLumina/NativeWindowSystem.cpp
+++ b/src-qt5/core/libLumina/NativeWindowSystem.cpp
@@ -45,7 +45,6 @@
#define ROOT_WIN_EVENT_MASK (XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | \
XCB_EVENT_MASK_BUTTON_PRESS | \
XCB_EVENT_MASK_STRUCTURE_NOTIFY | \
- XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | \
XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | \
XCB_EVENT_MASK_POINTER_MOTION | \
XCB_EVENT_MASK_PROPERTY_CHANGE | \
@@ -60,13 +59,45 @@
XCB_EVENT_MASK_STRUCTURE_NOTIFY | \
XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | \
XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | \
- XCB_EVENT_MASK_ENTER_WINDOW| \
- XCB_EVENT_MASK_PROPERTY_CHANGE)
+ XCB_EVENT_MASK_ENTER_WINDOW | \
+ XCB_EVENT_MASK_PROPERTY_CHANGE | \
+ XCB_EVENT_MASK_FOCUS_CHANGE)
+
+#define CLIENT_EVENT_MASK (XCB_EVENT_MASK_PROPERTY_CHANGE | \
+ XCB_EVENT_MASK_STRUCTURE_NOTIFY | \
+ XCB_EVENT_MASK_FOCUS_CHANGE | \
+ XCB_EVENT_MASK_POINTER_MOTION)
+
+#define FRAME_EVENT_MASK (XCB_EVENT_MASK_BUTTON_PRESS | \
+ XCB_EVENT_MASK_BUTTON_RELEASE | \
+ XCB_EVENT_MASK_POINTER_MOTION | \
+ XCB_EVENT_MASK_EXPOSURE | \
+ XCB_EVENT_MASK_STRUCTURE_NOTIFY | \
+ XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | \
+ XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | \
+ XCB_EVENT_MASK_ENTER_WINDOW)
-inline void registerClientEvents(WId id){
+inline void registerClientEvents(WId id, bool client = true){
+ uint32_t values[] = {XCB_NONE};
+ values[0] = client ? CLIENT_EVENT_MASK : FRAME_EVENT_MASK ;
+ /*{ (XCB_EVENT_MASK_PROPERTY_CHANGE
+ | XCB_EVENT_MASK_BUTTON_PRESS
+ | XCB_EVENT_MASK_BUTTON_RELEASE
+ | XCB_EVENT_MASK_POINTER_MOTION
+ | XCB_EVENT_MASK_BUTTON_MOTION
+ | XCB_EVENT_MASK_EXPOSURE
+ | XCB_EVENT_MASK_STRUCTURE_NOTIFY
+ | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT
+ | XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY
+ | XCB_EVENT_MASK_ENTER_WINDOW)
+ };*/
+ xcb_change_window_attributes(QX11Info::connection(), id, XCB_CW_EVENT_MASK, values);
+}
+
+/*inline void registerClientEvents(WId id){
uint32_t value_list[1] = {NORMAL_WIN_EVENT_MASK};
xcb_change_window_attributes(QX11Info::connection(), id, XCB_CW_EVENT_MASK, value_list);
-}
+}*/
//Internal XCB private objects class
class NativeWindowSystem::p_objects{
@@ -255,7 +286,7 @@ NativeWindow* NativeWindowSystem::findWindow(WId id, bool checkRelated){
//qDebug() << "Find Window:" << id;
for(int i=0; i<NWindows.length(); i++){
if(id==NWindows[i]->id() ){ return NWindows[i]; }
- else if(id==NWindows[i]->frameId() ){ qDebug() << "Matched Frame:" << id; return NWindows[i]; }
+ else if(id==NWindows[i]->frameId() ){ return NWindows[i]; }
//if(checkRelated && NWindows[i]->isRelatedTo(id)){ return NWindows[i]; }
//else if(!checkRelated && id==NWindows[i]->id()){ return NWindows[i]; }
}
@@ -479,27 +510,27 @@ void NativeWindowSystem::ChangeWindowProperties(NativeWindow* win, QList< Native
}
if(props.contains(NativeWindow::Size) || props.contains(NativeWindow::GlobalPos) ){
- xcb_configure_window_value_list_t valList;
- valList.x = 0; //Note that this is the relative position - should always be 0,0 relative to the embed widget
- valList.y = 0;
+ /*xcb_configure_window_value_list_t valList;
+ //valList.x = 0; //Note that this is the relative position - should always be 0,0 relative to the embed widget
+ //valList.y = 0;
QSize sz = win->property(NativeWindow::Size).toSize();
if(props.contains(NativeWindow::Size)){
sz = vals[ props.indexOf(NativeWindow::Size) ] .toSize();
}
valList.width = sz.width();
valList.height = sz.height();
- /*if(props.contains(NativeWindow::GlobalPos)){
+ if(props.contains(NativeWindow::GlobalPos)){
QPoint pt = vals[ props.indexOf(NativeWindow::GlobalPos) ] .toPoint();
valList.x = pt.x();
valList.y = pt.y();
}else{
valList.x = win->property(NativeWindow::GlobalPos).toPoint().x();
valList.y = win->property(NativeWindow::GlobalPos).toPoint().y();
- }*/
+ }
uint16_t mask = 0;
- mask = mask | XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT;// | XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y;
- qDebug() << "Configure window Geometry:" << sz;
- xcb_configure_window_aux(QX11Info::connection(), win->id(), mask, &valList);
+ mask = mask | XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT | XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y;
+ //qDebug() << "Configure window Geometry:" << sz;
+ xcb_configure_window_aux(QX11Info::connection(), win->id(), mask, &valList);*/
}
if(props.contains(NativeWindow::Name)){
@@ -524,10 +555,20 @@ void NativeWindowSystem::ChangeWindowProperties(NativeWindow* win, QList< Native
if(props.contains(NativeWindow::Active)){
//Only one window can be "Active" at a time - so only do anything if this window wants to be active
if(vals[props.indexOf(NativeWindow::Active)].toBool() ){
- xcb_ewmh_set_active_window(&obj->EWMH, QX11Info::appScreen(), (win->frameId()==0 ?win->id() : win->frameId()));
+ //Lower the currently active window (invisible window) to the bottom of the stack
+ xcb_window_t cactive;
+ if( 1 == xcb_ewmh_get_active_window_reply( &obj->EWMH,
+ xcb_ewmh_get_active_window_unchecked(&obj->EWMH, QX11Info::appScreen()),
+ &cactive, NULL) ){
+ uint32_t val = XCB_STACK_MODE_BELOW;
+ xcb_configure_window(QX11Info::connection(), cactive, XCB_CONFIG_WINDOW_STACK_MODE, &val);
+ }
+
+ xcb_ewmh_set_active_window(&obj->EWMH, QX11Info::appScreen(), win->id() );
//Also send the active window a message to take input focus
+ xcb_set_input_focus(QX11Info::connection(), XCB_INPUT_FOCUS_PARENT, win->id(), XCB_CURRENT_TIME);
//Send the window a WM_TAKE_FOCUS message
- xcb_client_message_event_t event;
+/* xcb_client_message_event_t event;
event.response_type = XCB_CLIENT_MESSAGE;
event.format = 32;
event.window = win->id();
@@ -540,6 +581,7 @@ void NativeWindowSystem::ChangeWindowProperties(NativeWindow* win, QList< Native
xcb_send_event(QX11Info::connection(), 0, win->id(), XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, (const char *) &event);
xcb_flush(QX11Info::connection());
+*/
}
}
@@ -553,6 +595,9 @@ void NativeWindowSystem::RegisterVirtualRoot(WId id){
array[0] = id;
//Set the property
xcb_ewmh_set_virtual_roots(&obj->EWMH, QX11Info::appScreen(), 1, array);
+ //Now also enable automatic compositing for children of this window
+ //xcb_composite_redirect_window(QX11Info::connection(), id, XCB_COMPOSITE_REDIRECT_AUTOMATIC);
+ //xcb_composite_redirect_subwindows(QX11Info::connection(), id, XCB_COMPOSITE_REDIRECT_AUTOMATIC);
}
void NativeWindowSystem::setRoot_supportedActions(){
@@ -561,7 +606,7 @@ void NativeWindowSystem::setRoot_supportedActions(){
obj->EWMH._NET_WM_ICON,
obj->EWMH._NET_WM_ICON_NAME,
obj->EWMH._NET_WM_DESKTOP,
- obj->ATOMS["_NET_WM_WINDOW_OPACITY"],
+ /*obj->ATOMS["_NET_WM_WINDOW_OPACITY"],*/
/*_NET_WINDOW_TYPE (and all the various types - 15 in total*/
obj->EWMH._NET_WM_WINDOW_TYPE, obj->EWMH._NET_WM_WINDOW_TYPE_DESKTOP, obj->EWMH._NET_WM_WINDOW_TYPE_DOCK,
obj->EWMH._NET_WM_WINDOW_TYPE_TOOLBAR, obj->EWMH._NET_WM_WINDOW_TYPE_MENU, obj->EWMH._NET_WM_WINDOW_TYPE_UTILITY,
@@ -625,7 +670,7 @@ void NativeWindowSystem::setRoot_desktopWorkarea(QList<QRect> list){
}
void NativeWindowSystem::setRoot_activeWindow(WId win){
- xcb_ewmh_set_active_window(&obj->EWMH, QX11Info::appScreen(), win);
+ /*xcb_ewmh_set_active_window(&obj->EWMH, QX11Info::appScreen(), win);
//Also send the active window a message to take input focus
//Send the window a WM_TAKE_FOCUS message
xcb_client_message_event_t event;
@@ -640,7 +685,7 @@ void NativeWindowSystem::setRoot_activeWindow(WId win){
event.data.data32[4] = 0;
xcb_send_event(QX11Info::connection(), 0, win, XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, (const char *) &event);
- xcb_flush(QX11Info::connection());
+ xcb_flush(QX11Info::connection());*/
}
int NativeWindowSystem::currentWorkspace(){
@@ -656,7 +701,7 @@ int NativeWindowSystem::currentWorkspace(){
//NativeWindowEventFilter interactions
void NativeWindowSystem::NewWindowDetected(WId id){
//Make sure this can be managed first
- if(findWindow(id, false) != 0){ qDebug() << "Window Already Managed!!!!"; findWindow(id,false)->setProperty(NativeWindow::Visible, true, true); return; } //already managed
+ if(findWindow(id, false) != 0){ findWindow(id,false)->setProperty(NativeWindow::Visible, true, true); return; } //already managed
xcb_get_window_attributes_cookie_t cookie = xcb_get_window_attributes(QX11Info::connection(), id);
xcb_get_window_attributes_reply_t *attr = xcb_get_window_attributes_reply(QX11Info::connection(), cookie, NULL);
if(attr == 0){ return; } //could not get attributes of window
@@ -668,7 +713,7 @@ void NativeWindowSystem::NewWindowDetected(WId id){
registerClientEvents(win->id());
NWindows << win;
UpdateWindowProperties(win, NativeWindow::allProperties());
- qDebug() << "New Window [& associated ID's]:" << win->id() << win->frameId() << win->property(NativeWindow::RelatedWindows);
+ qDebug() << "New Window [& associated ID's]:" << win->id() << win->property(NativeWindow::Name).toString();
//Now setup the connections with this window
connect(win, SIGNAL(RequestClose(WId)), this, SLOT(RequestClose(WId)) );
connect(win, SIGNAL(RequestKill(WId)), this, SLOT(RequestKill(WId)) );
@@ -733,6 +778,27 @@ void NativeWindowSystem::WindowPropertyChanged(WId id, NativeWindow::Property pr
if(win==0){ win = findTrayWindow(id); }
if(win!=0){
UpdateWindowProperties(win, QList<NativeWindow::Property>() << prop);
+ }else if(prop != 0){
+ //Could not find the window for a specific property with an undefined value
+ // - update this property for all the windows just in case
+ for(int i=0; i<NWindows.length(); i++){
+ UpdateWindowProperties( NWindows[i], QList<NativeWindow::Property>() << prop);
+ }
+ }
+}
+
+void NativeWindowSystem::WindowPropertiesChanged(WId id, QList<NativeWindow::Property> props){
+ //NOTE: This is triggered by the NativeEventFilter - not by changes to the NativeWindow objects themselves
+ NativeWindow *win = findWindow(id);
+ if(win==0){ win = findTrayWindow(id); }
+ if(win!=0){
+ UpdateWindowProperties(win, props);
+ }else{
+ //Could not find the window for a specific property with an undefined value
+ // - update this property for all the windows just in case
+ for(int i=0; i<NWindows.length(); i++){
+ UpdateWindowProperties( NWindows[i], props);
+ }
}
}
diff --git a/src-qt5/core/libLumina/NativeWindowSystem.h b/src-qt5/core/libLumina/NativeWindowSystem.h
index 97208c2f..b67ecc94 100644
--- a/src-qt5/core/libLumina/NativeWindowSystem.h
+++ b/src-qt5/core/libLumina/NativeWindowSystem.h
@@ -105,6 +105,7 @@ public slots:
void NewTrayWindowDetected(WId); //will automatically create the new NativeWindow object
void WindowCloseDetected(WId); //will update the lists and make changes if needed
void WindowPropertyChanged(WId, NativeWindow::Property); //will rescan the window and update the object as needed
+ void WindowPropertiesChanged(WId, QList<NativeWindow::Property>);
void WindowPropertyChanged(WId, NativeWindow::Property, QVariant); //will save that property/value to the right object
void WindowPropertiesChanged(WId, QList<NativeWindow::Property>, QList<QVariant>);
void RequestPropertyChange(WId, NativeWindow::Property, QVariant);
diff --git a/src-qt5/core/libLumina/RootSubWindow-animations.cpp b/src-qt5/core/libLumina/RootSubWindow-animations.cpp
index ac813e3a..efab20fe 100644
--- a/src-qt5/core/libLumina/RootSubWindow-animations.cpp
+++ b/src-qt5/core/libLumina/RootSubWindow-animations.cpp
@@ -11,16 +11,20 @@ QStringList RootSubWindow::validAnimations(NativeWindow::Property prop){
QStringList valid;
if(prop == NativeWindow::Visible){
valid << "zoom" << "wipe-center-vertical" << "wipe-center-horizontal" << "shade-top" << "shade-right" << "shade-left" << "shade-bottom";
+ }else if(prop == NativeWindow::Size){
+ //Note: this is used for pretty much all geometry changes to the window where it is visible both before/after animation
+ valid << "direct";
}
return valid;
}
void RootSubWindow::loadAnimation(QString name, NativeWindow::Property prop, QVariant nval){
+ if(anim->state()==QAbstractAnimation::Running){ return; } //already running
animResetProp.clear();
//Special case - random animation each time
if(name=="random"){
QStringList valid = validAnimations(prop);
- name = valid.at(qrand()%valid.length());
+ if(!valid.isEmpty()){ name = valid.at(qrand()%valid.length()); }
}
//Now setup the animation
if(prop == NativeWindow::Visible){
@@ -57,6 +61,7 @@ void RootSubWindow::loadAnimation(QString name, NativeWindow::Property prop, QVa
}
if(nval.toBool()){
this->setGeometry( anim->startValue().toRect() ); //ensure the window is the initial geom before it becomes visible
+ //QTimer::singleShot( anim->duration()+5, this, SLOT(activate()) );
}else{
QVariant tmp = anim->startValue();
anim->setStartValue(anim->endValue());
@@ -68,6 +73,19 @@ void RootSubWindow::loadAnimation(QString name, NativeWindow::Property prop, QVa
anim->start();
this->show();
} //end of Visibility animation
+ else if(prop == NativeWindow::Size){
+ //This is pretty much all geometry animations where the window is visible->visible
+ anim->setPropertyName("geometry");
+ anim->setStartValue(this->geometry());
+ anim->setEndValue(nval.toRect());
+ /*if(name==""){
+ // TO-DO modify the path from beginning->end somehow
+ }*/
+ // Now start the animation
+ WinWidget->pause();
+ anim->start();
+ this->show();
+ }
}
void RootSubWindow::animFinished(){
@@ -87,11 +105,12 @@ void RootSubWindow::animFinished(){
//qDebug() << "Sub Window geometry:" << clientg;
WIN->setProperties(QList< NativeWindow::Property>() << NativeWindow::Size << NativeWindow::GlobalPos,
QList<QVariant>() << clientg.size() << clientg.topLeft() );
- WinWidget->resyncWindow(); //also let the window know about the current geometry
}
}
+ WinWidget->resyncWindow(); //also let the window know about the current geometry
}
animResetProp = QVariant(); //clear the variable
- WinWidget->resume();
-
+ //QTimer::singleShot(10, WinWidget, SLOT(resume()) );
+ WinWidget->resume();
+ emit windowAnimFinished();
}
diff --git a/src-qt5/core/libLumina/RootSubWindow.cpp b/src-qt5/core/libLumina/RootSubWindow.cpp
index 6341f923..5fb8ece4 100644
--- a/src-qt5/core/libLumina/RootSubWindow.cpp
+++ b/src-qt5/core/libLumina/RootSubWindow.cpp
@@ -10,6 +10,7 @@
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QTimer>
+#include <QScreen>
#define WIN_BORDER 5
@@ -56,7 +57,7 @@ RootSubWindow::ModState RootSubWindow::getStateAtPoint(QPoint pt, bool setoffset
if(setoffset){ offset.setX(pt.x()); offset.setY(pt.y()); } //difference from top-left corner
return ResizeTopLeft;
}else if(pt.x() > (this->width()*4.0/5.0)){
- if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(pt.y()); } //difference from top-right corner
+ if(setoffset){ offset.setX(pt.x()-this->width()); offset.setY(pt.y()); } //difference from top-right corner
return ResizeTopRight;
}else{
if(setoffset){ offset.setX(0); offset.setY(pt.y()); } //difference from top edge (X does not matter)
@@ -65,13 +66,13 @@ RootSubWindow::ModState RootSubWindow::getStateAtPoint(QPoint pt, bool setoffset
}else if(pt.y() > (this->height()-WIN_BORDER) ){
//One of the bottom options
if(pt.x() < this->width()/5){
- if(setoffset){ offset.setX(pt.x()); offset.setY(this->height()-pt.y()); } //difference from bottom-left corner
+ if(setoffset){ offset.setX(pt.x()); offset.setY(pt.y()-this->height()); } //difference from bottom-left corner
return ResizeBottomLeft;
}else if(pt.x() > (this->width()*4.0/5.0)){
- if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(this->height()-pt.y()); } //difference from bottom-right corner
+ if(setoffset){ offset.setX(pt.x()-this->width()); offset.setY(pt.y()-this->height()); } //difference from bottom-right corner
return ResizeBottomRight;
}else{
- if(setoffset){ offset.setX(0); offset.setY(this->height() - pt.y()); } //difference from bottom edge (X does not matter)
+ if(setoffset){ offset.setX(0); offset.setY(pt.y()-this->height()); } //difference from bottom edge (X does not matter)
return ResizeBottom;
}
}else if(pt.x() < WIN_BORDER){
@@ -80,7 +81,7 @@ RootSubWindow::ModState RootSubWindow::getStateAtPoint(QPoint pt, bool setoffset
if(setoffset){ offset.setX(pt.x()); offset.setY(pt.y()); } //difference from top-left corner
return ResizeTopLeft;
}else if(pt.y() > (this->height()*4.0/5.0)){
- if(setoffset){ offset.setX(pt.x()); offset.setY(this->height()-pt.y()); } //difference from bottom-left corner
+ if(setoffset){ offset.setX(pt.x()); offset.setY(pt.y()-this->height()); } //difference from bottom-left corner
return ResizeBottomLeft;
}else{
if(setoffset){ offset.setX(pt.x()); offset.setY(0); } //difference from left edge (Y does not matter)
@@ -89,13 +90,13 @@ RootSubWindow::ModState RootSubWindow::getStateAtPoint(QPoint pt, bool setoffset
}else if(pt.x() > (this->width()-WIN_BORDER) ){
//Right side options
if(pt.y() < this->height()/5){
- if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(pt.y()); } //difference from top-right corner
+ if(setoffset){ offset.setX(pt.x()-this->width()); offset.setY(pt.y()); } //difference from top-right corner
return ResizeTopRight;
}else if(pt.y() > (this->height()*4.0/5.0)){
- if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(this->height()-pt.y()); } //difference from bottom-right corner
+ if(setoffset){ offset.setX(pt.x()-this->width()); offset.setY(pt.y()-this->height()); } //difference from bottom-right corner
return ResizeBottomRight;
}else{
- if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(0); } //difference from right edge (Y does not matter)
+ if(setoffset){ offset.setX(pt.x()-this->width()); offset.setY(0); } //difference from right edge (Y does not matter)
return ResizeRight;
}
}else{
@@ -186,12 +187,14 @@ void RootSubWindow::initWindowFrame(){
titleBar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
mainLayout->addWidget(titleBar);
mainLayout->addWidget(WinWidget);
+ mainLayout->setAlignment(titleBar, Qt::AlignTop);
//Setup the cursors for the buttons
closeB->setCursor(Qt::ArrowCursor);
minB->setCursor(Qt::ArrowCursor);
maxB->setCursor(Qt::ArrowCursor);
- otherM->setCursor(Qt::ArrowCursor);
+ otherB->setCursor(Qt::ArrowCursor);
titleLabel->setCursor(Qt::ArrowCursor);
+ WinWidget->setCursor(Qt::ArrowCursor);
//Now all the stylesheet options
this->setObjectName("WindowFrame");
closeB->setObjectName("Button_Close");
@@ -277,12 +280,44 @@ void RootSubWindow::LoadAllProperties(){
//Button Actions - public so they can be tied to key shortcuts and stuff as well
void RootSubWindow::toggleMinimize(){
- WIN->setProperty(NativeWindow::Visible, false);
- QTimer::singleShot(2000, this, SLOT(toggleMaximize()) );
+ WIN->toggleVisibility();
}
void RootSubWindow::toggleMaximize(){
- WIN->setProperty(NativeWindow::Visible, true);
+ //Get the current screen that this window is on
+ QList<QScreen*> screens = QApplication::screens();
+ QRect rect;
+ int primaryscreen = 0; //fallback value
+ for(int i=0; i<screens.length(); i++){
+ QRect intersect = screens[i]->geometry().intersected(this->geometry());
+ if( (intersect.width()-rect.width() + intersect.height()-rect.height()) > 0){
+ rect = intersect;
+ primaryscreen = i;
+ }
+ }
+ //Now that we have the screen dimensions, lets check/change the window
+ rect = screens[primaryscreen]->availableGeometry();
+ QList< NativeWindow::State > states = WIN->property(NativeWindow::States).value< QList< NativeWindow::State> >();
+ if(rect == this->geometry() || states.contains(NativeWindow::S_MAX_VERT) || states.contains(NativeWindow::S_MAX_HORZ)){
+ //Already maximized - try to restore it to the previous size/location
+ if(!lastMaxGeom.isNull()){
+ rect = lastMaxGeom;
+ }else{
+ // no last geometry - started out maximized?
+ // make it half the screen size and centered on the screen
+ QPoint center = rect.center();
+ rect.setWidth( rect.width()/2 );
+ rect.setHeight( rect.height()/2 );
+ rect.moveTopLeft( center - QPoint(rect.width()/2, rect.height()/2) );
+ }
+ lastMaxGeom = QRect(); //clear this saved geom
+ }else{
+ //Not maximized yet - go ahead and make it so
+ lastMaxGeom = this->geometry(); //save this for later;
+ }
+ //qDebug() << "Toggle Maximize:" << this->geometry() << rect;
+ QString anim_type = DesktopSettings::instance()->value(DesktopSettings::Animation, "window/move", "random").toString();
+ loadAnimation(anim_type, NativeWindow::Size, rect);
}
void RootSubWindow::triggerClose(){
@@ -290,11 +325,18 @@ void RootSubWindow::triggerClose(){
}
void RootSubWindow::toggleSticky(){
-
+ QList< NativeWindow::State> states = WIN->property(NativeWindow::States).value< QList< NativeWindow::State > >();
+ if(states.contains(NativeWindow::S_STICKY)){
+ states.removeAll(NativeWindow::S_STICKY);
+ }else{
+ states << NativeWindow::S_STICKY;
+ }
+ WIN->requestProperty(NativeWindow::States, QVariant::fromValue<QList <NativeWindow::State> >(states) );
}
void RootSubWindow::activate(){
- WIN->requestProperty(NativeWindow::Active, true);
+ //WinWidget->raiseWindow();
+ WIN->requestProperty(NativeWindow::Active, true, true);
}
//Mouse Interactivity
@@ -309,13 +351,15 @@ void RootSubWindow::startMoving(){
activeState = Move;
offset = this->mapFromGlobal(curpt);
setMouseCursor(activeState, true); //this one is an override cursor
- //WinWidget->pause();
- //Also need to capture the mouse
+ WinWidget->pause();
this->grabMouse();
}
void RootSubWindow::startResizing(){
-
+ activeState = getStateAtPoint( this->mapFromGlobal(QCursor::pos()), true); //also have it set the offset variable
+ setMouseCursor(activeState, true); //this one is an override cursor
+ WinWidget->pause();
+ this->grabMouse();
}
// === PRIVATE SLOTS ===
@@ -325,9 +369,11 @@ void RootSubWindow::propertiesChanged(QList<NativeWindow::Property> props, QList
//qDebug() << "RootSubWindow: Property Changed:" << props[i] << vals[i];
switch(props[i]){
case NativeWindow::Visible:
- //qDebug() << "Got Visibility Change:" << vals[i] << this->geometry() << WIN->geometry();
- if(vals[i].toBool()){ loadAnimation( DesktopSettings::instance()->value(DesktopSettings::Animation, "window/appear", "random").toString(), NativeWindow::Visible, vals[i]); }
- else{ loadAnimation( DesktopSettings::instance()->value(DesktopSettings::Animation, "window/disappear", "random").toString(), NativeWindow::Visible, vals[i]); }
+ if(!WinWidget->isPaused() && (this->isVisible()!=vals[i].toBool()) && activeState==Normal ){
+ qDebug() << "Got Visibility Change:" << vals[i] << this->geometry() << WIN->geometry();
+ if(vals[i].toBool()){ loadAnimation( DesktopSettings::instance()->value(DesktopSettings::Animation, "window/appear", "random").toString(), NativeWindow::Visible, vals[i]); }
+ else{ loadAnimation( DesktopSettings::instance()->value(DesktopSettings::Animation, "window/disappear", "random").toString(), NativeWindow::Visible, vals[i]); }
+ }
break;
case NativeWindow::Title:
titleLabel->setText(vals[i].toString());
@@ -338,6 +384,10 @@ void RootSubWindow::propertiesChanged(QList<NativeWindow::Property> props, QList
else{ otherB->setIcon(vals[i].value<QIcon>()); }
break;
case NativeWindow::GlobalPos:
+ if(vals[i].toPoint()!=QPoint(0,0)){
+ WinWidget->resyncWindow();
+ }
+ break;
case NativeWindow::Size:
//qDebug() << " - SIZE CHANGE";
if(WIN->property(NativeWindow::FrameExtents).isNull() && (i<props.indexOf(NativeWindow::FrameExtents)) ){
@@ -345,9 +395,11 @@ void RootSubWindow::propertiesChanged(QList<NativeWindow::Property> props, QList
props << props.takeAt(i);
vals << vals.takeAt(i);
i--;
- }else if(anim->state() != QPropertyAnimation::Running ){
- if(WIN->property(NativeWindow::Size).toSize() != WinWidget->size() && activeState==Normal ){
- this->setGeometry(WIN->geometry());
+ }else if(!WinWidget->isPaused() && activeState==Normal){
+ if(WIN->property(NativeWindow::Size).toSize() != WinWidget->size()){
+ qDebug() << "Got Direct Geometry Change:" << WIN->geometry();
+ this->setGeometry( QRect(this->geometry().topLeft(), WIN->geometry().size()) );
+ WinWidget->resyncWindow();
}
}
break;
@@ -370,7 +422,7 @@ void RootSubWindow::propertiesChanged(QList<NativeWindow::Property> props, QList
WinWidget->setMaximumSize(vals[i].toSize());
break;
case NativeWindow::Active:
- //if(vals[i].toBool()){ WinWidget->setFocus(); }
+ if(vals[i].toBool()){ activate(); } //WinWidget->raiseWindow(); }
break;
/*case NativeWindow::FrameExtents:
qDebug() << " - FRAME CHANGE";
@@ -382,6 +434,7 @@ void RootSubWindow::propertiesChanged(QList<NativeWindow::Property> props, QList
mainLayout->setContentsMargins( vals[i].value< QList<int> >().at(0),vals[i].value< QList<int> >().at(2) - titleLabel->height(),vals[i].value< QList<int> >().at(1),vals[i].value< QList<int> >().at(3));
break;*/
case NativeWindow::WinTypes:
+ qDebug() << "Got Window Types:" << vals[i].value< QList<NativeWindow::Type> >();
enableFrame(vals[i].value< QList<NativeWindow::Type> >().contains(NativeWindow::T_NORMAL) );
break;
default:
@@ -394,27 +447,24 @@ void RootSubWindow::propertiesChanged(QList<NativeWindow::Property> props, QList
void RootSubWindow::mousePressEvent(QMouseEvent *ev){
activate();
this->raise();
+ QFrame::mousePressEvent(ev);
//qDebug() << "Frame Mouse Press Event";
- offset.setX(0); offset.setY(0);
if(activeState != Normal){ return; } // do nothing - already in a state of grabbed mouse
- //this->activate();
- if(this->childAt(ev->pos())!=0){
- //Check for any non-left-click event and skip it
- if(ev->button()!=Qt::LeftButton){ return; }
- activeState = Move;
- offset.setX(ev->pos().x()); offset.setY(ev->pos().y());
- }else{
- //Clicked on the frame somewhere
- activeState = getStateAtPoint(ev->pos(), true); //also have it set the offset variable
+ offset.setX(0); offset.setY(0);
+ if(ev->button()==Qt::LeftButton){
+ if(this->childAt(ev->pos())!=0){
+ //Clicked on the titlebar
+ startMoving();
+ }else{
+ //Clicked on the frame somewhere
+ startResizing();
+ }
}
- setMouseCursor(activeState, true); //this one is an override cursor
- //if(activeState!=Normal){WinWidget->pause(); }
- if(activeState!=Normal && activeState!=Move){WinWidget->pause(); }
- QFrame::mousePressEvent(ev);
+
}
void RootSubWindow::mouseMoveEvent(QMouseEvent *ev){
- activate(); //make sure this window is "Active"
+ QFrame::mouseMoveEvent(ev);
if(activeState == Normal){
setMouseCursor( getStateAtPoint(ev->pos()) ); //just update the mouse cursor
}else{
@@ -489,10 +539,15 @@ void RootSubWindow::mouseMoveEvent(QMouseEvent *ev){
break;
}
//if( (geom.width()%2==0 && geom.height()%2==0) || activeState==Move){
- this->setGeometry(geom);
+ //qDebug() << " Change Window:" << this->geometry() << geom;
+ if(activeState==Move){ this->setGeometry(geom); }
+ else{
+ //qDebug() << " Change Window Dimensions:" << this->geometry() << geom;
+ //qDebug() << " - Mouse Pos:" << ev->globalPos() << ev->pos() << "Offset" << offset;
+ this->setGeometry(geom);
+ }
//}
}
- QFrame::mouseMoveEvent(ev);
}
void RootSubWindow::mouseReleaseEvent(QMouseEvent *ev){
@@ -500,28 +555,37 @@ void RootSubWindow::mouseReleaseEvent(QMouseEvent *ev){
//qDebug() << "Frame Mouse Release Event";
QFrame::mouseReleaseEvent(ev);
if( (activeState==Normal) && (titleBar->geometry().contains(ev->pos())) && (ev->button()==Qt::RightButton) ){
+ //WinWidget->raiseWindow();//need to ensure the native window is always on top of this frame but under the menu
otherM->popup(ev->globalPos());
return;
}
- if(activeState!=Normal){ WinWidget->resume(); }
- if(activeState!=Normal && activeState!=Move){WinWidget->resume(); }
- activeState = Normal;
- QApplication::restoreOverrideCursor();
- setMouseCursor( getStateAtPoint(ev->pos()) );
+ if(activeState!=Normal){
+ if(WinWidget->isPaused()){ WinWidget->resume(); }
+ activeState = Normal;
+ QApplication::restoreOverrideCursor();
+ setMouseCursor( getStateAtPoint(ev->pos()) );
+ }
if(QFrame::mouseGrabber() == this){ this->releaseMouse(); }
+ activate();
+ //QTimer::singleShot(0, WinWidget, SLOT(raiseWindow()) );
}
-void RootSubWindow::leaveEvent(QEvent *ev){
+/*void RootSubWindow::enterEvent(QEvent *ev){
+ QFrame::enterEvent(ev);
+ WinWidget->raiseWindow();
+}*/
+/*void RootSubWindow::leaveEvent(QEvent *ev){
QFrame::leaveEvent(ev);
if(activeState == Normal){
setMouseCursor(Normal);
}
-}
+ if(!QRect(QPoint(0,0),this->size()).contains( this->mapFromGlobal(QCursor::pos())) ){ WinWidget->lowerWindow(); }
+}*/
void RootSubWindow::moveEvent(QMoveEvent *ev){
//qDebug() << "Got Move Event:" << ev->pos() << WinWidget->geometry();
QFrame::moveEvent(ev);
- if(!closing && anim->state()!=QAbstractAnimation::Running){
+ if(!closing && !WinWidget->isPaused()){
moveTimer->start();
}
}
diff --git a/src-qt5/core/libLumina/RootSubWindow.h b/src-qt5/core/libLumina/RootSubWindow.h
index 0af77009..c1964724 100644
--- a/src-qt5/core/libLumina/RootSubWindow.h
+++ b/src-qt5/core/libLumina/RootSubWindow.h
@@ -55,7 +55,7 @@ private:
QPropertyAnimation *anim;
QVariant animResetProp;
QTimer *moveTimer;
- QRect lastGeom; //frame coordinates
+ QRect lastGeom, lastMaxGeom; //frame coordinates
void initWindowFrame();
void enableFrame(bool);
@@ -65,6 +65,10 @@ private:
static QStringList validAnimations(NativeWindow::Property);
public slots:
+ void giveMouseFocus(){ WinWidget->raiseWindow(); }
+ void removeMouseFocus(){ WinWidget->lowerWindow(); }
+ void giveKeyboardFocus(){ WIN->requestProperty(NativeWindow::Active, true, true); }
+
void clientClosed();
void LoadAllProperties();
@@ -91,11 +95,13 @@ protected:
void mousePressEvent(QMouseEvent*);
void mouseMoveEvent(QMouseEvent*);
void mouseReleaseEvent(QMouseEvent*);
- void leaveEvent(QEvent *ev);
-
+ //void leaveEvent(QEvent *ev);
+ //void enterEvent(QEvent *ev);
void moveEvent(QMoveEvent *ev);
-
+signals:
+ void windowMoved(RootSubWindow*);
+ void windowAnimFinished();
};
#endif
diff --git a/src-qt5/core/libLumina/RootWindow-mgmt.cpp b/src-qt5/core/libLumina/RootWindow-mgmt.cpp
index 00b3e336..24ea639b 100644
--- a/src-qt5/core/libLumina/RootWindow-mgmt.cpp
+++ b/src-qt5/core/libLumina/RootWindow-mgmt.cpp
@@ -7,13 +7,59 @@
#include "RootWindow.h"
//Primary/private function
-void RootWindow::arrangeWindows(RootSubWindow *primary, QString type){
+void RootWindow::arrangeWindows(RootSubWindow *primary, QString type, bool primaryonly){
+ if(type.isEmpty()){ type = "center"; }
if(primary==0){
//Get the currently active window and treat that as the primary
-
+ for(int i=0; i<WINDOWS.length(); i++){
+ if(WINDOWS[i]->nativeWindow()->property(NativeWindow::Active).toBool()){ primary = WINDOWS[i]; }
+ }
+ if(primary==0 && !WINDOWS.isEmpty()){ primary = WINDOWS[0]; } //just use the first one in the list
+ }
+ //Now get the current screen that the mouse cursor is over (and valid area)
+ QScreen *screen = screenUnderMouse();
+ QRect desktopArea = screen->availableGeometry();
+ //qDebug() << "Arrange Windows:" << primary->geometry() << type << primaryonly << desktopArea;
+ //Now start filtering out all the windows that need to be ignored
+ int wkspace = primary->nativeWindow()->property(NativeWindow::Workspace).toInt();
+ QList<RootSubWindow*> winlist = WINDOWS;
+ for(int i=0; i<winlist.length(); i++){
+ if(winlist[i]->nativeWindow()->property(NativeWindow::Workspace).toInt()!=wkspace
+ || !winlist[i]->nativeWindow()->property(NativeWindow::Visible).toBool()
+ || desktopArea.intersected(winlist[i]->geometry()).isNull() ){
+ //window is outside of the desired area or invisible - ignore it
+ winlist.removeAt(i);
+ i--;
+ }
}
- //Now loop over the windows and arrange them as needed
+ if(!winlist.contains(primary)){ winlist << primary; } //could be doing this on a window right before it is shown
+ else if(primaryonly){ winlist.removeAll(primary); winlist << primary; } //move primary window to last
+ //QRegion used;
+ for(int i=0; i<winlist.length(); i++){
+ if(primaryonly && winlist[i]!=primary){ continue; } //skip this window
+ //Now loop over the windows and arrange them as needed
+ QRect geom = winlist[i]->geometry();
+ //verify that the window is contained by the desktop area
+ if(geom.width()>desktopArea.width()){ geom.setWidth(desktopArea.width()); }
+ if(geom.height()>desktopArea.height()){ geom.setHeight(desktopArea.height()); }
+ //Now apply the proper placement routine
+ if(type=="center"){
+ QPoint ct = desktopArea.center();
+ winlist[i]->setGeometry( ct.x()-(geom.width()/2), ct.y()-(geom.height()/2), geom.width(), geom.height());
+ }else if(type=="snap"){
+
+ }else if(type=="single_max"){
+ winlist[i]->setGeometry( desktopArea.x(), desktopArea.y(), desktopArea.width(), desktopArea.height());
+ }else if(type=="under-mouse"){
+ QPoint ct = QCursor::pos();
+ geom = QRect(ct.x()-(geom.width()/2), ct.y()-(geom.height()/2), geom.width(), geom.height() );
+ //Now verify that the top of the window is still contained within the desktop area
+ if(geom.y() < desktopArea.y() ){ geom.moveTop(desktopArea.y()); }
+ winlist[i]->setGeometry(geom);
+ }
+ //qDebug() << " - New Geometry:" << winlist[i]->geometry();
+ } //end loop over winlist
}
// ================
@@ -21,13 +67,13 @@ void RootWindow::arrangeWindows(RootSubWindow *primary, QString type){
// ================
void RootWindow::ArrangeWindows(WId primary, QString type){
RootSubWindow* win = windowForId(primary);
- if(type.isEmpty()){ type = ""; } //grab the default arrangement format
+ if(type.isEmpty()){ type = "center"; } //grab the default arrangement format
arrangeWindows(win, type);
}
void RootWindow::TileWindows(WId primary, QString type){
RootSubWindow* win = windowForId(primary);
- if(type.isEmpty()){ type = ""; } //grab the default arrangement format for tiling
+ if(type.isEmpty()){ type = "single_max"; } //grab the default arrangement format for tiling
arrangeWindows(win, type);
}
@@ -45,5 +91,5 @@ void RootWindow::CheckWindowPosition(WId id, bool newwindow){
if(geom.height() < 20){ changed = true; geom.setHeight(100); }
if(changed){ win->setGeometry(geom); }
//Now run it through the window arrangement routine
- ArrangeWindows(id);
+ arrangeWindows(win, newwindow ?"center" : "snap", true);
}
diff --git a/src-qt5/core/libLumina/RootWindow.cpp b/src-qt5/core/libLumina/RootWindow.cpp
index 48c37c86..fdbc1eb8 100644
--- a/src-qt5/core/libLumina/RootWindow.cpp
+++ b/src-qt5/core/libLumina/RootWindow.cpp
@@ -10,12 +10,14 @@
#include <QScreen>
#include <QDebug>
-#define DEBUG 1
+#define DEBUG 0
// === PUBLIC ===
RootWindow::RootWindow() : QWidget(0, Qt::Window | Qt::BypassWindowManagerHint | Qt::WindowStaysOnBottomHint){
qRegisterMetaType<WId>("WId");
autoResizeTimer = 0;
+ lastActiveMouse = 0;
+ mouseFocusTimer = 0;
this->setMouseTracking(true);
}
@@ -33,6 +35,12 @@ void RootWindow::start(){
connect(QApplication::desktop(), SIGNAL(resized(int)), autoResizeTimer, SLOT(start()) );
connect(QApplication::desktop(), SIGNAL(screenCountChanged(int)), autoResizeTimer, SLOT(start()) );
}
+ if(mouseFocusTimer==0){
+ mouseFocusTimer = new QTimer(this);
+ mouseFocusTimer->setInterval(100);
+ connect(mouseFocusTimer, SIGNAL(timeout()), this, SLOT(checkMouseFocus()) );
+
+ }
this->show();
ResizeRoot();
emit RegisterVirtualRoot(this->winId());
@@ -108,6 +116,16 @@ RootSubWindow* RootWindow::windowForId(WId id){
return tmp;
}
+QScreen* RootWindow::screenUnderMouse(){
+ QPoint mpos = QCursor::pos();
+ QList<QScreen*> scrns = QApplication::screens();
+ for(int i=0; i<scrns.length(); i++){
+ if(scrns[i]->geometry().contains(mpos)){ return scrns[i]; }
+ }
+ //Could not find an exact match - just return the first one
+ return scrns.first();
+}
+
// === PUBLIC SLOTS ===
void RootWindow::ResizeRoot(){
if(DEBUG){ qDebug() << "Resize Root..."; }
@@ -182,6 +200,32 @@ void RootWindow::ChangeWallpaper(QString id, RootWindow::ScaleType scale, QStrin
}
+void RootWindow::checkMouseFocus(){
+ QPoint cpos = QCursor::pos();
+ if(lastCursorPos != cpos){ emit MouseMoved(); }
+ lastCursorPos = cpos;
+ QWidget *child = this->childAt(QCursor::pos());
+ while(child!=0 && child->whatsThis()!="RootSubWindow"){
+ child = child->parentWidget();
+ if(child==this){ child = 0;} //end of the line
+ }
+
+ if(child==lastActiveMouse){ return; } //nothing new to do
+ //Make sure the child is actually a RootSubWindow
+ if(lastActiveMouse!=0){ lastActiveMouse->removeMouseFocus(); lastActiveMouse = 0; }
+ if(child!=0){
+ lastActiveMouse = static_cast<RootSubWindow*>(child);
+
+ if(DesktopSettings::instance()->value(DesktopSettings::WM, "focusFollowsMouse", true).toBool()){
+ lastActiveMouse->giveKeyboardFocus();
+ if(DesktopSettings::instance()->value(DesktopSettings::WM, "raiseOnFocus", false).toBool()){
+ lastActiveMouse->raise();
+ }
+ }
+ lastActiveMouse->giveMouseFocus(); //always give mouse focus on mouseover
+ }
+}
+
void RootWindow::NewWindow(NativeWindow *win){
RootSubWindow *subwin = 0;
//qDebug() << "Got New Window:" << win->property(NativeWindow::Title);
@@ -190,19 +234,27 @@ void RootWindow::NewWindow(NativeWindow *win){
}
if(subwin==0){
subwin = new RootSubWindow(this, win);
+ subwin->setWhatsThis("RootSubWindow");
connect(win, SIGNAL(WindowClosed(WId)), this, SLOT(CloseWindow(WId)) );
+ connect(subwin, SIGNAL(windowAnimFinished()), this, SLOT(checkMouseFocus()) );
WINDOWS << subwin;
}
CheckWindowPosition(win->id(), true); //first-time run
- //win->setProperty(NativeWindow::Visible, true);
+ win->setProperty(NativeWindow::Visible, true);
//win->requestProperty( NativeWindow::Active, true);
- win->requestProperties(QList<NativeWindow::Property>() << NativeWindow::Visible << NativeWindow::Active, QList<QVariant>() << true << true);
+ //win->requestProperties(QList<NativeWindow::Property>() << NativeWindow::Visible << NativeWindow::Active, QList<QVariant>() << true << true, true);
+ if(!mouseFocusTimer->isActive()){ mouseFocusTimer->start(); }
}
void RootWindow::CloseWindow(WId win){
for(int i=0; i<WINDOWS.length(); i++){
- if(WINDOWS[i]->id() == win){ WINDOWS.takeAt(i)->clientClosed(); break; }
+ if(WINDOWS[i]->id() == win){
+ if(lastActiveMouse==WINDOWS[i]){ lastActiveMouse = 0; } //no longer valid
+ WINDOWS.takeAt(i)->clientClosed();
+ break;
+ }
}
+ if(WINDOWS.isEmpty()){ mouseFocusTimer->stop(); } //no windows to look for
}
// === PRIVATE SLOTS ===
@@ -210,11 +262,11 @@ void RootWindow::CloseWindow(WId win){
// === PROTECTED ===
void RootWindow::paintEvent(QPaintEvent *ev){
//qDebug() << "RootWindow: PaintEvent:" << ev->rect(); //<< QDateTime::currentDateTime()->toString(QDateTime::ShortDate);
- QWidget::paintEvent(ev);
+ //QWidget::paintEvent(ev);
bool found = false;
QPainter painter(this);
QRect geom = ev->rect();
- geom.adjust(-10,-10,10,10); //give it a few more pixels in each direction to repaint (noticing some issues in Qt 5.7.1)
+ geom.adjust(-100,-100,100,100); //give it a few more pixels in each direction to repaint (noticing some issues in Qt 5.7.1)
for(int i=0; i<WALLPAPERS.length(); i++){
if(WALLPAPERS[i].area.intersects(geom) ){
found = true;
diff --git a/src-qt5/core/libLumina/RootWindow.h b/src-qt5/core/libLumina/RootWindow.h
index 9b1334dc..c5cd44a0 100644
--- a/src-qt5/core/libLumina/RootWindow.h
+++ b/src-qt5/core/libLumina/RootWindow.h
@@ -18,6 +18,8 @@
#include <QTimer>
#include <QApplication>
#include <QPaintEvent>
+#include <QScreen>
+#include <QDebug>
#include "RootSubWindow.h"
@@ -43,7 +45,9 @@ private:
ScaleType scale;
QPixmap wallpaper; //Note: This pixmap will always be the same size as "area"
};
- QTimer *autoResizeTimer;
+ QTimer *autoResizeTimer, *mouseFocusTimer;
+ RootSubWindow *lastActiveMouse;
+ QPoint lastCursorPos;
QList<screeninfo> WALLPAPERS;
void updateScreenPixmap(screeninfo *info); //used for recalculating the wallpaper pixmap based on file/area/scale as needed
@@ -51,12 +55,16 @@ private:
//Window Management
QList<RootSubWindow*> WINDOWS;
RootSubWindow* windowForId(WId id);
- void arrangeWindows(RootSubWindow *primary = 0, QString type = "");
+ void arrangeWindows(RootSubWindow *primary = 0, QString type = "", bool primaryonly = false);
+
+ QScreen* screenUnderMouse();
+
public slots:
void ResizeRoot();
void ChangeWallpaper(QString id, RootWindow::ScaleType scale, QString file);
//Note: for "SingleColor" scaling the "file" variable should be "rgb(R,G,B)" or "#hexcode"
+ void checkMouseFocus();
void NewWindow(NativeWindow*);
void CloseWindow(WId); //automatically connected for any new native window
@@ -76,6 +84,8 @@ signals:
void RootResized(QRect);
void NewScreens(QStringList); // [screen_id_1, screen_id_2, etc..]
void RemovedScreens(QStringList); // [screen_id_1, screen_id_2, etc..]
+ void WorkspaceChanged(int);
+ void MouseMoved();
};
diff --git a/src-qt5/core/libLumina/XDGMime.cpp b/src-qt5/core/libLumina/XDGMime.cpp
index 3983f6b5..cbbeff75 100644
--- a/src-qt5/core/libLumina/XDGMime.cpp
+++ b/src-qt5/core/libLumina/XDGMime.cpp
@@ -12,6 +12,9 @@ static QStringList mimeglobs;
static qint64 mimechecktime;
QString XDGMime::fromFileName(QString filename){
+ if(QFile::exists(filename) && QFileInfo(filename).isDir()){
+ return "inode/directory";
+ }
//Convert a filename into a mimetype
return findAppMimeForFile(filename.section("/",-1),false);
}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/JsonMenu.h b/src-qt5/core/lumina-desktop-unified/JsonMenu.h
index 5a6b2237..2624153d 100644
--- a/src-qt5/core/lumina-desktop-unified/src-DE/JsonMenu.h
+++ b/src-qt5/core/lumina-desktop-unified/JsonMenu.h
@@ -4,21 +4,13 @@
// Available under the 3-clause BSD license
// See the LICENSE file for full details
//===========================================
-// This menu is used to automatically generate menu contents
+// This menu is used to automatically generate menu contents
// based on the JSON output of an external script/utility
//===========================================
#ifndef _LUMINA_DESKTOP_JSON_MENU_H
#define _LUMINA_DESKTOP_JSON_MENU_H
-#include <QMenu>
-#include <QString>
-#include <QJsonDocument>
-#include <QJsonObject>
-#include <QJsonArray>
-
-#include <LUtils.h>
-#include <LuminaXDG.h>
-#include "LSession.h"
+#include <global-objects.h>
class JsonMenu : public QMenu{
Q_OBJECT
@@ -38,7 +30,7 @@ private slots:
QString type = obj.value("type").toString();
if(type.toLower()=="item"){
QAction *act = this->addAction(label);
- if(obj.contains("icon")){ act->setIcon( LXDG::findIcon(obj.value("icon").toString(),"") ); }
+ if(obj.contains("icon")){ LIconCache::instance()->loadIcon(act, obj.value("icon").toString()); }
if(obj.contains("action")){ act->setWhatsThis( obj.value("action").toString() ); }
else{ act->setEnabled(false); } //not interactive
}else if(type.toLower()=="menu"){
@@ -48,7 +40,7 @@ private slots:
if(!obj.contains("exec")){ return; }
JsonMenu *menu = new JsonMenu(obj.value("exec").toString(), this);
menu->setTitle(label);
- if(obj.contains("icon")){ menu->setIcon(LXDG::findIcon(obj.value("icon").toString(),"") ); }
+ if(obj.contains("icon")){ LIconCache::instance()->loadIcon(menu, obj.value("icon").toString()); }
this->addMenu(menu);
}
}
@@ -73,7 +65,7 @@ private slots:
QString cmd = act->whatsThis();
QString bin = cmd.section(" ",0,0);
if( !LUtils::isValidBinary(bin) ){ cmd.prepend("lumina-open "); }
- LSession::handle()->LaunchApplication(cmd);
+ LSession::instance()->LaunchApplication(cmd);
}
};
#endif
diff --git a/src-qt5/core/lumina-desktop-unified/LSession.cpp b/src-qt5/core/lumina-desktop-unified/LSession.cpp
index c6f79584..d70ff973 100644
--- a/src-qt5/core/lumina-desktop-unified/LSession.cpp
+++ b/src-qt5/core/lumina-desktop-unified/LSession.cpp
@@ -11,7 +11,7 @@
#include "BootSplash.h"
#ifndef DEBUG
-#define DEBUG 0
+#define DEBUG 1
#endif
//Initialize all the global objects to null pointers
@@ -28,6 +28,7 @@ LSession::LSession(int &argc, char ** argv) : LSingleApplication(argc, argv, "lu
qRegisterMetaType< Qt::Key >("Qt::Key");
qRegisterMetaType< NativeWindow::Property >("NativeWindow::Property");
qRegisterMetaType< QList< NativeWindow::Property > >("QList<NativeWindow::Property>");
+ qRegisterMetaType< NativeWindowSystem::MouseButton >("NativeWindowSystem::MouseButton");
mediaObj = 0; //private object used for playing login/logout chimes
if(this->isPrimaryProcess()){
@@ -50,10 +51,10 @@ LSession::LSession(int &argc, char ** argv) : LSingleApplication(argc, argv, "lu
Lumina::SS = new LScreenSaver();
//Now put the Native Window System into it's own thread to keep things snappy
Lumina::EVThread = new QThread();
- Lumina::NWS->moveToThread(Lumina::EVThread);
- Lumina::EVThread->start();
+ //Lumina::NWS->moveToThread(Lumina::EVThread);
+ //Lumina::EVThread->start();
+ Lumina::APPLIST = XDGDesktopList::instance();
Lumina::ROOTWIN = new RootWindow();
- Lumina::APPLIST = new XDGDesktopList(0, true); //keep this list up to date
Lumina::SHORTCUTS = new LShortcutEvents(); //this can be moved to it's own thread eventually as well
setupGlobalConnections();
@@ -133,7 +134,7 @@ void LSession::setupSession(){
Lumina::ROOTWIN->start();
Lumina::NWS->setRoot_numberOfWorkspaces(QStringList() << "one" << "two");
Lumina::NWS->setRoot_currentWorkspace(0);
-
+ if(DEBUG){ qDebug() << " - Create Desktop Context Menu"; }
DesktopContextMenu *cmenu = new DesktopContextMenu(Lumina::ROOTWIN);
connect(cmenu, SIGNAL(showLeaveDialog()), this, SLOT(StartLogout()) );
cmenu->start();
@@ -165,6 +166,7 @@ void LSession::setupSession(){
if(DEBUG){ qDebug() << " - Init Finished:" << timer->elapsed(); delete timer;}
Lumina::SHORTCUTS->start(); //Startup the shortcut handler now
+
//for(int i=0; i<4; i++){ LSession::processEvents(); } //Again, just a few event loops here so thing can settle before we close the splash screen
//launchStartupApps();
QTimer::singleShot(500, this, SLOT(launchStartupApps()) );
@@ -226,11 +228,13 @@ void LSession::setupGlobalConnections(){
//Root window connections
connect(Lumina::ROOTWIN, SIGNAL(RegisterVirtualRoot(WId)), Lumina::NWS, SLOT(RegisterVirtualRoot(WId)) );
connect(Lumina::ROOTWIN, SIGNAL(RootResized(QRect)), Lumina::NWS, SLOT(setRoot_desktopGeometry(QRect)) );
+ connect(Lumina::ROOTWIN, SIGNAL(MouseMoved()), Lumina::SS, SLOT(newInputEvent()) );
//Native Window Class connections
connect(Lumina::NEF, SIGNAL(WindowCreated(WId)), Lumina::NWS, SLOT(NewWindowDetected(WId)));
connect(Lumina::NEF, SIGNAL(WindowDestroyed(WId)), Lumina::NWS, SLOT(WindowCloseDetected(WId)));
connect(Lumina::NEF, SIGNAL(WindowPropertyChanged(WId, NativeWindow::Property)), Lumina::NWS, SLOT(WindowPropertyChanged(WId, NativeWindow::Property)));
+ connect(Lumina::NEF, SIGNAL(WindowPropertiesChanged(WId, QList<NativeWindow::Property>)), Lumina::NWS, SLOT(WindowPropertiesChanged(WId, QList<NativeWindow::Property>)) );
connect(Lumina::NEF, SIGNAL(WindowPropertyChanged(WId, NativeWindow::Property, QVariant)), Lumina::NWS, SLOT(WindowPropertyChanged(WId, NativeWindow::Property, QVariant)));
connect(Lumina::NEF, SIGNAL(WindowPropertiesChanged(WId, QList<NativeWindow::Property>, QList<QVariant>)), Lumina::NWS, SLOT(WindowPropertiesChanged(WId, QList<NativeWindow::Property>, QList<QVariant>)) );
connect(Lumina::NEF, SIGNAL(RequestWindowPropertyChange(WId, NativeWindow::Property, QVariant)), Lumina::NWS, SLOT(RequestPropertyChange(WId, NativeWindow::Property, QVariant)));
@@ -288,7 +292,7 @@ void LSession::playAudioFile(QString filepath){
if( !QFile::exists(filepath) ){ return; }
//Setup the audio output systems for the desktop
if(DEBUG){ qDebug() << "Play Audio File"; }
- if(mediaObj==0){ qDebug() << " - Initialize media player"; mediaObj = new QMediaPlayer(); }
+ if(mediaObj==0){ qDebug() << " - Initialize media player"; mediaObj = new QMediaPlayer(0,QMediaPlayer::LowLatency); }
if(mediaObj !=0 ){
if(DEBUG){ qDebug() << " - starting playback:" << filepath; }
mediaObj->setVolume(100);
@@ -382,10 +386,28 @@ void LSession::StartReboot(bool skipupdates){
}
void LSession::LaunchApplication(QString exec){
+ qDebug() << "Launch Application:" << exec;
ExternalProcess::launch(exec);
}
+void LSession::LaunchDesktopApplication(QString app, QString action){
+ qDebug() << "Launch Desktop Application:" << app << action;
+ XDGDesktop *xdg = Lumina::APPLIST->findAppFile(app);
+ bool cleanup = false;
+ if(xdg==0){
+ xdg = new XDGDesktop(app);
+ cleanup = true;
+ }
+ if(xdg->isValid()){
+ QString exec = xdg->generateExec(QStringList(), action);
+ ExternalProcess::launch(exec, QStringList(), xdg->startupNotify);
+ }
+
+ if(cleanup && xdg!=0){ xdg->deleteLater(); }
+}
+
void LSession::LaunchStandardApplication(QString app, QStringList args){
+ qDebug() << "Launch Standard Application:" << app << args;
//Find/replace standardized apps with thier mimetypes
if(app.startsWith("--")){ app = "application/"+app.section("--",-1).simplified(); }
//First see if this is a mimetype with a default application
@@ -393,24 +415,18 @@ void LSession::LaunchStandardApplication(QString app, QStringList args){
QString mimeapp = XDGMime::findDefaultAppForMime(app);
if(!mimeapp.isEmpty()){ app = mimeapp; }
}
- if(app.endsWith(".desktop")){
+ if(!app.endsWith(".desktop")){
+ //actual command/binary - just launch it
+ ExternalProcess::launch(app, args, false); // do not use startup notify cursor
+ }else{
//Get the XDGDesktop structure
XDGDesktop *desk = 0; bool cleanup = false;
if(app.startsWith("/") && QFile::exists(app)){ desk = new XDGDesktop(app); cleanup = true; }
- if(!desk->isValid()){
+ if(desk==0 || !desk->isValid()){
//Need to find the app within the current list
- QHash<QString, XDGDesktop*>applist = Lumina::APPLIST->files;
if(cleanup){ desk->deleteLater(); desk = 0; cleanup = false; }
app = app.section("/",-1); //make sure this is a relative path
- QStringList list = applist.keys().filter("/"+app);
- if(!list.filter(QDir::homePath()).isEmpty()){ desk = applist[list.filter(QDir::homePath()).first()]; } //prefer user-override files
- if(desk==0 || !desk->isValid()){
- desk = 0;
- for(int i=0; i<list.length() && desk==0; i++){
- XDGDesktop *tmp = applist[list[i]];
- if(tmp->isValid()){ desk = tmp; }
- }
- }
+ desk = Lumina::APPLIST->findAppFile(app);
}
if(desk!=0 && desk->isValid()){
//Got the application - go ahead and assemble the startup command
@@ -418,8 +434,6 @@ void LSession::LaunchStandardApplication(QString app, QStringList args){
ExternalProcess::launch(exec, QStringList(), desk->startupNotify);
}
if(cleanup){ desk->deleteLater(); }
- }else{
- ExternalProcess::launch(app, args, false); // do not use startup notify cursor
}
}
diff --git a/src-qt5/core/lumina-desktop-unified/LSession.h b/src-qt5/core/lumina-desktop-unified/LSession.h
index 85cc050c..61da559b 100644
--- a/src-qt5/core/lumina-desktop-unified/LSession.h
+++ b/src-qt5/core/lumina-desktop-unified/LSession.h
@@ -15,6 +15,9 @@ public:
LSession(int &argc, char **argv);
~LSession();
+ static LSession* instance(){
+ return ( static_cast<LSession*>(QApplication::instance()) );
+ }
private:
void CleanupSession();
void setupGlobalConnections();
@@ -33,6 +36,7 @@ public slots:
void StartShutdown(bool skipupdates = false);
void StartReboot(bool skipupdates = false);
void LaunchApplication(QString exec);
+ void LaunchDesktopApplication(QString app, QString action = "");
void LaunchStandardApplication(QString app, QStringList args = QStringList());
void reloadIconTheme(); //will emit the IconThemeChanged signal when ready
diff --git a/src-qt5/core/lumina-desktop-unified/defaults/compton.conf b/src-qt5/core/lumina-desktop-unified/defaults/compton.conf
deleted file mode 100644
index a14fee29..00000000
--- a/src-qt5/core/lumina-desktop-unified/defaults/compton.conf
+++ /dev/null
@@ -1,89 +0,0 @@
-# Shadow
-shadow = true;
-no-dnd-shadow = true;
-no-dock-shadow = true;
-clear-shadow = true;
-shadow-radius = 5;
-shadow-offset-x = -5;
-shadow-offset-y = -5;
-# shadow-opacity = 0.7;
-# shadow-red = 0.0;
-# shadow-green = 0.0;
-# shadow-blue = 0.0;
-shadow-exclude = [
- "name = 'Notification'",
- "class_g = 'Conky'",
- "class_g ?= 'Notify-osd'",
- "class_g = 'Cairo-clock'",
- "_GTK_FRAME_EXTENTS@:c"
-];
-# shadow-exclude = "n:e:Notification";
-# shadow-exclude-reg = "x10+0+0";
-# xinerama-shadow-crop = true;
-
-# Opacity
-menu-opacity = 0.9;
-inactive-opacity = 0.9;
-# active-opacity = 0.8;
-frame-opacity = 1.0;
-inactive-opacity-override = false;
-alpha-step = 0.06;
-# inactive-dim = 0.2;
-# inactive-dim-fixed = true;
-# blur-background = true;
-# blur-background-frame = true;
-blur-kern = "3x3box"
-# blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"
-# blur-background-fixed = true;
-blur-background-exclude = [
- "window_type = 'dock'",
- "window_type = 'desktop'",
- "_GTK_FRAME_EXTENTS@:c"
-];
-# opacity-rule = [ "80:class_g = 'URxvt'" ];
-
-# Fading
-fading = true;
-# fade-delta = 30;
-fade-in-step = 0.2;
-fade-out-step = 0.2;
-# no-fading-openclose = true;
-# no-fading-destroyed-argb = true;
-fade-exclude = [ ];
-
-# Other
-backend = "xrender"
-mark-wmwin-focused = true;
-mark-ovredir-focused = true;
-# use-ewmh-active-win = true;
-detect-rounded-corners = true;
-detect-client-opacity = true;
-refresh-rate = 0;
-vsync = "none";
-dbe = false;
-paint-on-overlay = true;
-# sw-opti = true;
-# unredir-if-possible = true;
-# unredir-if-possible-delay = 5000;
-# unredir-if-possible-exclude = [ ];
-focus-exclude = [ "class_g = 'Cairo-clock'" ];
-detect-transient = true;
-detect-client-leader = true;
-invert-color-include = [ ];
-# resize-damage = 1;
-
-# GLX backend
-# glx-no-stencil = true;
-glx-copy-from-front = false;
-# glx-use-copysubbuffermesa = true;
-# glx-no-rebind-pixmap = true;
-glx-swap-method = "undefined";
-# glx-use-gpushader4 = true;
-# xrender-sync = true;
-# xrender-sync-fence = true;
-
-# Window type settings
-wintypes:
-{
- tooltip = { fade = true; shadow = true; opacity = 0.85; focus = true; };
-};
diff --git a/src-qt5/core/lumina-desktop-unified/defaults/desktop/keys.conf b/src-qt5/core/lumina-desktop-unified/defaults/desktop/keys.conf
index 59959194..1a993ca3 100644
--- a/src-qt5/core/lumina-desktop-unified/defaults/desktop/keys.conf
+++ b/src-qt5/core/lumina-desktop-unified/defaults/desktop/keys.conf
@@ -2,7 +2,5 @@
Ctrl+Alt+Backspace=Logout
Pause=Lockscreen
Alt+L=Lockscreen
-
-[desktop]
Alt+F1=Launch: --terminal
Print=Launch: --screenshot
diff --git a/src-qt5/core/lumina-desktop-unified/defaults/desktop/screensaver.conf b/src-qt5/core/lumina-desktop-unified/defaults/desktop/screensaver.conf
new file mode 100644
index 00000000..89f4e488
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/defaults/desktop/screensaver.conf
@@ -0,0 +1,3 @@
+[General]
+default_plugin="fireflies"
+plugin_VGA-0="fireflies"
diff --git a/src-qt5/core/lumina-desktop-unified/global-includes.h b/src-qt5/core/lumina-desktop-unified/global-includes.h
index 8b8cd16c..184f5b8d 100644
--- a/src-qt5/core/lumina-desktop-unified/global-includes.h
+++ b/src-qt5/core/lumina-desktop-unified/global-includes.h
@@ -50,6 +50,10 @@
#include <QMediaPlayer>
#include <QVideoWidget>
#include <QMediaPlaylist>
+#include <QJsonObject>
+#include <QJsonArray>
+#include <QJsonDocument>
+
// libLumina includes
#include <LuminaX11.h>
@@ -66,6 +70,7 @@
#include <NativeWindowSystem.h>
#include <NativeEventFilter.h>
#include <XDGMime.h>
+#include <LIconCache.h>
// Standard C includes
#include <unistd.h>
diff --git a/src-qt5/core/lumina-desktop-unified/global-objects.h b/src-qt5/core/lumina-desktop-unified/global-objects.h
index 474412eb..0c990dc6 100644
--- a/src-qt5/core/lumina-desktop-unified/global-objects.h
+++ b/src-qt5/core/lumina-desktop-unified/global-objects.h
@@ -25,6 +25,7 @@
#include "src-screensaver/LScreenSaver.h"
//#include "src-WM/LWindowManager.h"
+#include "LSession.h"
//Any special defines for settings/testing
#define ANIMTIME 80 //animation time in milliseconds
diff --git a/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro b/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro
index 04d5b602..e8cf2f28 100644
--- a/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro
+++ b/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro
@@ -20,6 +20,7 @@ include(../libLumina/RootWindow.pri)
include(../libLumina/ExternalProcess.pri)
include(../libLumina/NativeWindow.pri)
include(../libLumina/XDGMime.pri)
+include(../libLumina/LIconCache.pri)
#include all the main individual source groups
include(src-screensaver/screensaver.pri)
@@ -35,7 +36,8 @@ SOURCES += main.cpp \
HEADERS += global-includes.h \
global-objects.h \
LSession.h \
- BootSplash.h
+ BootSplash.h \
+ JsonMenu.h
FORMS += BootSplash.ui
diff --git a/src-qt5/core/lumina-desktop-unified/main.cpp b/src-qt5/core/lumina-desktop-unified/main.cpp
index ef15cfcd..ed2b9b4c 100644
--- a/src-qt5/core/lumina-desktop-unified/main.cpp
+++ b/src-qt5/core/lumina-desktop-unified/main.cpp
@@ -29,7 +29,7 @@ int main(int argc, char ** argv)
setenv("DESKTOP_SESSION","Lumina",1);
setenv("XDG_CURRENT_DESKTOP","Lumina",1);
setenv("QT_NO_GLIB", "1", 1); //Disable the glib event loop within Qt at runtime (performance hit + bugs)
- //unsetenv("QT_QPA_PLATFORMTHEME"); //causes issues with Lumina themes - not many people have this by default...
+ setenv("QT_QPA_PLATFORMTHEME", "lthemeengine",1); //causes issues with Lumina themes - not many people have this by default...
unsetenv("QT_AUTO_SCREEN_SCALE_FACTOR"); //need exact-pixel measurements (no fake scaling)
//Startup the session
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/AppMenu.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/AppMenu.cpp
deleted file mode 100644
index 798d8b6d..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/AppMenu.cpp
+++ /dev/null
@@ -1,183 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "AppMenu.h"
-#include "LSession.h"
-#include <LuminaOS.h>
-
-AppMenu::AppMenu(QWidget* parent) : QMenu(parent){
- appstorelink = LOS::AppStoreShortcut(); //Default application "store" to display (AppCafe in TrueOS)
- controlpanellink = LOS::ControlPanelShortcut(); //Default control panel
- sysApps = new XDGDesktopList(this, true); //have this one automatically keep in sync
- APPS.clear();
- //watcher = new QFileSystemWatcher(this);
- //connect(watcher, SIGNAL(directoryChanged(QString)), this, SLOT(watcherUpdate()) );
- //QTimer::singleShot(200, this, SLOT(start()) ); //Now start filling the menu
- start(); //do the initial run during session init so things are responsive immediately.
- connect(QApplication::instance(), SIGNAL(LocaleChanged()), this, SLOT(watcherUpdate()) );
- connect(QApplication::instance(), SIGNAL(IconThemeChanged()), this, SLOT(watcherUpdate()) );
-}
-
-AppMenu::~AppMenu(){
-
-}
-
-QHash<QString, QList<XDGDesktop*> >* AppMenu::currentAppHash(){
- return &APPS;
-}
-
-//===========
-// PRIVATE
-//===========
-void AppMenu::updateAppList(){
- //watcher->removePaths(watcher->directories());
- //Make sure the title/icon are updated as well (in case of locale/icon change)
- this->setTitle(tr("Applications"));
- this->setIcon( LXDG::findIcon("system-run","") );
- //Now update the lists
- this->clear();
- APPS.clear(); //NOTE: Don't delete these pointers - the pointers are managed by the sysApps class and these are just references to them
- //qDebug() << "New Apps List:";
- if(LSession::handle()->sessionSettings()->value("AutomaticDesktopAppLinks",true).toBool() && !lastHashUpdate.isNull() ){
- QString desktop = QDir::homePath()+"/"+tr("Desktop")+"/"; //translated desktop folder
- if(!QFile::exists(desktop)){
- desktop = QDir::homePath()+"/Desktop/"; //desktop folder
- if(!QFile::exists(desktop)){
- desktop = QDir::homePath()+"/desktop/"; //lowercase desktop folder
- if(!QFile::exists(desktop)){ desktop.clear(); }
- }
- }
- //qDebug() << "Update Desktop Folder:" << desktop << sysApps->removedApps << sysApps->newApps;
- QStringList tmp = sysApps->removedApps;
- for(int i=0; i<tmp.length() && !desktop.isEmpty(); i++){
- //Remove any old symlinks first
- QString filename = tmp[i].section("/",-1);
- //qDebug() << "Check for symlink:" << filename;
- if( QFileInfo(desktop+filename).isSymLink() ){ QFile::remove(desktop+filename); }
- }
- tmp = sysApps->newApps;
- for(int i=0; i<tmp.length() && !desktop.isEmpty(); i++){
- XDGDesktop *desk = sysApps->files.value(tmp[i]);
- if(desk->isHidden || !desk->isValid(false) ){ continue; } //skip this one
- //qDebug() << "New App: " << tmp[i] << desk.filePath << "Hidden:" << desk.isHidden;
- //Create a new symlink for this file if one does not exist
- QString filename = tmp[i].section("/",-1);
- //qDebug() << "Check for symlink:" << filename;
- if(!QFile::exists(desktop+filename) ){ QFile::link(tmp[i], desktop+filename); }
- }
- }
- QList<XDGDesktop*> allfiles = sysApps->apps(false,false); //only valid, non-hidden apps
- APPS = LXDG::sortDesktopCats(allfiles);
- APPS.insert("All", LXDG::sortDesktopNames(allfiles));
- lastHashUpdate = QDateTime::currentDateTime();
- //Now fill the menu
- //Add link to the file manager
- //this->addAction( LXDG::findIcon("user-home", ""), tr("Browse Files"), this, SLOT(launchFileManager()) );
- //--Look for the app store
- XDGDesktop store(appstorelink);
- if(store.isValid()){
- this->addAction( LXDG::findIcon(store.icon, ""), tr("Manage Applications"), this, SLOT(launchStore()) );
- }
- //--Look for the control panel
- XDGDesktop controlp(controlpanellink);
- if(controlp.isValid()){
- this->addAction( LXDG::findIcon(controlp.icon, ""), tr("Control Panel"), this, SLOT(launchControlPanel()) );
- }
- this->addSeparator();
- //--Now create the sub-menus
- QStringList cats = APPS.keys();
- cats.sort(); //make sure they are alphabetical
- for(int i=0; i<cats.length(); i++){
- //Make sure they are translated and have the right icons
- QString name, icon;
- if(cats[i]=="All"){continue; } //skip this listing for the menu
- else if(cats[i] == "Multimedia"){ name = tr("Multimedia"); icon = "applications-multimedia"; }
- else if(cats[i] == "Development"){ name = tr("Development"); icon = "applications-development"; }
- else if(cats[i] == "Education"){ name = tr("Education"); icon = "applications-education"; }
- else if(cats[i] == "Game"){ name = tr("Games"); icon = "applications-games"; }
- else if(cats[i] == "Graphics"){ name = tr("Graphics"); icon = "applications-graphics"; }
- else if(cats[i] == "Network"){ name = tr("Network"); icon = "applications-internet"; }
- else if(cats[i] == "Office"){ name = tr("Office"); icon = "applications-office"; }
- else if(cats[i] == "Science"){ name = tr("Science"); icon = "applications-science"; }
- else if(cats[i] == "Settings"){ name = tr("Settings"); icon = "preferences-system"; }
- else if(cats[i] == "System"){ name = tr("System"); icon = "applications-system"; }
- else if(cats[i] == "Utility"){ name = tr("Utility"); icon = "applications-utilities"; }
- else if(cats[i] == "Wine"){ name = tr("Wine"); icon = "wine"; }
- else{ name = tr("Unsorted"); icon = "applications-other"; }
-
- QMenu *menu = new QMenu(name, this);
- menu->setIcon(LXDG::findIcon(icon,""));
- connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(launchApp(QAction*)) );
- QList<XDGDesktop*> appL = APPS.value(cats[i]);
- for( int a=0; a<appL.length(); a++){
- if(appL[a]->actions.isEmpty()){
- //Just a single entry point - no extra actions
- QAction *act = new QAction(LXDG::findIcon(appL[a]->icon, ""), appL[a]->name, this);
- act->setToolTip(appL[a]->comment);
- act->setWhatsThis(appL[a]->filePath);
- menu->addAction(act);
- }else{
- //This app has additional actions - make this a sub menu
- // - first the main menu/action
- QMenu *submenu = new QMenu(appL[a]->name, this);
- submenu->setIcon( LXDG::findIcon(appL[a]->icon,"") );
- //This is the normal behavior - not a special sub-action (although it needs to be at the top of the new menu)
- QAction *act = new QAction(LXDG::findIcon(appL[a]->icon, ""), appL[a]->name, this);
- act->setToolTip(appL[a]->comment);
- act->setWhatsThis(appL[a]->filePath);
- submenu->addAction(act);
- //Now add entries for every sub-action listed
- for(int sa=0; sa<appL[a]->actions.length(); sa++){
- QAction *sact = new QAction(LXDG::findIcon(appL[a]->actions[sa].icon, appL[a]->icon), appL[a]->actions[sa].name, this);
- sact->setToolTip(appL[a]->comment);
- sact->setWhatsThis("-action \""+appL[a]->actions[sa].ID+"\" \""+appL[a]->filePath+"\"");
- submenu->addAction(sact);
- }
- menu->addMenu(submenu);
- }
- }
- this->addMenu(menu);
- }
- // watcher->addPaths(LXDG::systemApplicationDirs());
- emit AppMenuUpdated();
-}
-
-//=================
-// PRIVATE SLOTS
-//=================
-void AppMenu::start(){
- //Setup the watcher
- connect(sysApps, SIGNAL(appsUpdated()), this, SLOT(watcherUpdate()) );
- sysApps->updateList();
- //Now fill the menu the first time
- updateAppList();
-}
-
-void AppMenu::watcherUpdate(){
- updateAppList(); //Update the menu listings
-}
-
-void AppMenu::launchStore(){
- LSession::LaunchApplication("lumina-open \""+appstorelink+"\"");
-}
-
-void AppMenu::launchControlPanel(){
- LSession::LaunchApplication("lumina-open \""+controlpanellink+"\"");
-}
-
-void AppMenu::launchFileManager(){
- QString fm = "lumina-open \""+QDir::homePath()+"\"";
- LSession::LaunchApplication(fm);
-}
-
-void AppMenu::launchApp(QAction *act){
- QString appFile = act->whatsThis();
- if(appFile.startsWith("-action")){
- LSession::LaunchApplication("lumina-open "+appFile); //already has quotes put in place properly
- }else{
- LSession::LaunchApplication("lumina-open \""+appFile+"\"");
- }
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/AppMenu.h b/src-qt5/core/lumina-desktop-unified/src-DE/AppMenu.h
deleted file mode 100644
index 5baaab7a..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/AppMenu.h
+++ /dev/null
@@ -1,58 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This menu auto-updates to keep the list of available applications
-// current at all times - and can launch them as necessary
-//===========================================
-#ifndef _LUMINA_DESKTOP_APP_MENU_H
-#define _LUMINA_DESKTOP_APP_MENU_H
-
-// Qt includes
-#include <QMenu>
-#include <QFileSystemWatcher>
-#include <QString>
-#include <QList>
-#include <QTimer>
-#include <QDateTime>
-#include <QHash>
-#include <QAction>
-#include <QSettings>
-//#include <QProcess>
-
-// libLumina includes
-#include <LuminaXDG.h>
-
-class AppMenu : public QMenu{
- Q_OBJECT
-public:
- AppMenu(QWidget *parent = 0);
- ~AppMenu();
-
- QHash<QString, QList<XDGDesktop*> > *currentAppHash();
- QDateTime lastHashUpdate;
-
-private:
- //QFileSystemWatcher *watcher;
- QString appstorelink, controlpanellink;
- QList<QMenu> MLIST;
- XDGDesktopList *sysApps;
- QHash<QString, QList<XDGDesktop*> > APPS;
-
- void updateAppList(); //completely update the menu lists
-
-private slots:
- void start(); //This is called in a new thread after initialization
- void watcherUpdate();
- void launchStore();
- void launchControlPanel();
- void launchFileManager();
- void launchApp(QAction *act);
-
-signals:
- void AppMenuUpdated();
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/LDesktop.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/LDesktop.cpp
deleted file mode 100644
index de7d086e..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/LDesktop.cpp
+++ /dev/null
@@ -1,553 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2012-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LDesktop.h"
-#include "LSession.h"
-
-#include <LuminaOS.h>
-#include <LuminaX11.h>
-#include "LWinInfo.h"
-#include "JsonMenu.h"
-
-#include <QScreen>
-
-#define DEBUG 0
-
-LDesktop::LDesktop(int deskNum, bool setdefault) : QObject(){
- screenID = QApplication::screens().at(deskNum)->name();
- DPREFIX = "desktop-"+screenID+"/";
- //desktopnumber = deskNum;
- //desktop = QApplication::desktop();
- defaultdesktop = setdefault; //(desktop->screenGeometry(desktopnumber).x()==0);
- //desktoplocked = true;
- issyncing = bgupdating = false;
- usewinmenu=false;
-
- //Setup the internal variables
- settings = new QSettings(QSettings::UserScope, "lumina-desktop","desktopsettings", this);
- //qDebug() << " - Desktop Settings File:" << settings->fileName();
- if(!QFile::exists(settings->fileName())){ settings->setValue(DPREFIX+"background/filelist",QStringList()<<"default"); settings->sync(); }
- //bgWindow = 0;
- bgDesktop = 0;
- QTimer::singleShot(1,this, SLOT(InitDesktop()) );
-
-}
-
-LDesktop::~LDesktop(){
- delete deskMenu;
- delete winMenu;
- //delete bgWindow;
- delete workspacelabel;
- delete wkspaceact;
-}
-
-int LDesktop::Screen(){
- QList<QScreen*> scrns = QApplication::screens();
- for(int i=0; i<scrns.length(); i++){
- if(scrns[i]->name()==screenID){ return i; }
- }
- return -1;
-}
-
-void LDesktop::show(){
- //if(bgWindow!=0){ bgWindow->show(); }
- if(bgDesktop!=0){ bgDesktop->show(); }
- for(int i=0; i<PANELS.length(); i++){ PANELS[i]->show(); }
-}
-
-void LDesktop::hide(){
- //if(bgWindow!=0){ bgWindow->hide(); }
- if(bgDesktop!=0){ bgDesktop->hide(); }
- for(int i=0; i<PANELS.length(); i++){ PANELS[i]->hide(); }
-}
-
-void LDesktop::prepareToClose(){
- //Get any panels ready to close
- issyncing = true; //Stop handling any watcher events
- for(int i=0; i<PANELS.length(); i++){ PANELS[i]->prepareToClose(); PANELS.takeAt(i)->deleteLater(); i--; }
- //Now close down any desktop plugins
- //desktoplocked = true; //make sure that plugin settings are preserved during removal
- //Remove all the current containers
- bgDesktop->cleanup();
-}
-
-WId LDesktop::backgroundID(){
- if(bgDesktop!=0){ return bgDesktop->winId(); }
- else{ return QX11Info::appRootWindow(); }
-}
-
-QRect LDesktop::availableScreenGeom(){
- //Return a QRect containing the (global) screen area that is available (not under any panels)
- if(bgDesktop!=0){
- return globalWorkRect; //saved from previous calculations
- }else{
- return LSession::handle()->screenGeom( Screen() );
- }
-}
-
-void LDesktop::UpdateGeometry(){
- //First make sure there is something different about the geometry
- //if(desktop->screenGeometry(Screen())==bgWindow->geometry()){ return; }
- //Now update the screen
- // NOTE: This functionality is highly event-driven based on X changes - so we need to keep things in order (no signals/slots)
- //qDebug() << "Changing Desktop Geom:" << Screen();
- //bgWindow->setGeometry(desktop->screenGeometry(Screen()));
- /*for(int i=0; i<PANELS.length(); i++){
- PANELS[i]->UpdatePanel(true); //geom only updates - do this before adjusting the background
- }*/
- //qDebug() << " - Update Desktop Plugin Area";
- UpdateDesktopPluginArea();
- //qDebug() << " - Done With Desktop Geom Updates";
- QTimer::singleShot(0, this, SLOT(UpdatePanels()));
-}
-
-void LDesktop::SystemLock(){
- QProcess::startDetached("xscreensaver-command -lock");
-}
-
-void LDesktop::SystemLogout(){
- LSession::handle()->systemWindow();
-}
-
-void LDesktop::SystemTerminal(){
- LSession::handle()->sessionSettings()->sync(); //make sure it is up to date
- QString term = LXDG::findDefaultAppForMime("application/terminal"); //LSession::handle()->sessionSettings()->value("default-terminal","xterm").toString();
- if(term.isEmpty() ||(!term.endsWith(".desktop") && !LUtils::isValidBinary(term)) ){ term = "xterm"; }
- LSession::LaunchApplication("lumina-open \""+term+"\"");
-}
-
-void LDesktop::SystemFileManager(){
- //Just open the home directory
- QString fm = "lumina-open \""+QDir::homePath()+"\"";
- LSession::LaunchApplication(fm);
-}
-
-void LDesktop::SystemApplication(QAction* act){
- if(!act->whatsThis().isEmpty() && act->parent()==deskMenu){
- LSession::LaunchApplication("lumina-open \""+act->whatsThis()+"\"");
- }
-}
-
-void LDesktop::checkResolution(){
- //Compare the current screen resolution with the last one used/saved and adjust config values *only*
- //NOTE: This is only run the first time this desktop is created (before loading all the interface) - not on each desktop change
- int oldWidth = settings->value(DPREFIX+"screen/lastWidth",-1).toInt();
- int oldHeight = settings->value(DPREFIX+"screen/lastHeight",-1).toInt();
- QRect scrn = LSession::handle()->screenGeom( Screen() );
- if(scrn.isNull()){ return; }
- issyncing = true;
- settings->setValue(DPREFIX+"screen/lastWidth",scrn.width());
- settings->setValue(DPREFIX+"screen/lastHeight",scrn.height());
-
- if(oldWidth<1 || oldHeight<1 || scrn.width()<1 || scrn.height()<1){
- //nothing to do - something invalid
- }else if(scrn.width()==oldWidth && scrn.height()==oldHeight){
- //nothing to do - same as before
- }else{
- //Calculate the scale factor between the old/new sizes in each dimension
- // and forward that on to all the interface elements
- double xscale = scrn.width()/((double) oldWidth);
- double yscale = scrn.height()/((double) oldHeight);
- if(DEBUG){
- qDebug() << "Screen Resolution Changed:" << screenID;
- qDebug() << " - Old:" << QString::number(oldWidth)+"x"+QString::number(oldHeight);
- qDebug() << " - New:" << QString::number(scrn.width())+"x"+QString::number(scrn.height());
- qDebug() << " - Scale Factors:" << xscale << yscale;
- }
- //Update any panels in the config file
- for(int i=0; i<4; i++){
- QString PPREFIX = "panel"+QString::number(Screen())+"."+QString::number(i)+"/";
- int ht = settings->value(PPREFIX+"height",-1).toInt();
- if(ht<1){ continue; } //no panel height defined
- QString loc = settings->value(PPREFIX+"location","top").toString().toLower();
- if(loc=="top" || loc=="bottom"){
- settings->setValue(PPREFIX+"height", (int) ht*yscale); //vertical dimension
- }else{
- settings->setValue(PPREFIX+"height", (int) ht*xscale); //horizontal dimension
- }
- }
- //Update any desktop plugins
- QStringList plugs = settings->value(DPREFIX+"pluginlist").toStringList();
- QFileInfoList files = LSession::handle()->DesktopFiles();
- for(int i=0; i<files.length(); i++){
- plugs << "applauncher::"+files[i].absoluteFilePath()+"---"+DPREFIX;
- }
- //QString pspath = QDir::homePath()+"/.lumina/desktop-plugins/%1.conf";
- QSettings *DP = LSession::handle()->DesktopPluginSettings();
- QStringList keys = DP->allKeys();
- for(int i=0; i<plugs.length(); i++){
- QStringList filter = keys.filter(plugs[i]);
- for(int j=0; j<filter.length(); j++){
- //Has existing settings - need to adjust it
- if(filter[j].endsWith("location/height")){ DP->setValue( filter[j], qRound(DP->value(filter[j]).toInt()*yscale) ); }
- if(filter[j].endsWith("location/width")){ DP->setValue( filter[j], qRound(DP->value(filter[j]).toInt()*xscale) ); }
- if(filter[j].endsWith("location/x")){ DP->setValue( filter[j], qRound(DP->value(filter[j]).toInt()*xscale) ); }
- if(filter[j].endsWith("location/y")){ DP->setValue( filter[j], qRound(DP->value(filter[j]).toInt()*yscale) ); }
- if(filter[j].endsWith("IconSize")){ DP->setValue( filter[j], qRound(DP->value(filter[j]).toInt()*yscale) ); }
- if(filter[j].endsWith("iconsize")){ DP->setValue( filter[j], qRound(DP->value(filter[j]).toInt()*yscale) ); }
- }
- }
- DP->sync(); //make sure it gets saved to disk right away
-
- }
- issyncing = false;
-}
-
-// =====================
-// PRIVATE SLOTS
-// =====================
-void LDesktop::InitDesktop(){
- //This is called *once* during the main initialization routines
- checkResolution(); //Adjust the desktop config file first (if necessary)
- if(DEBUG){ qDebug() << "Init Desktop:" << Screen(); }
- //connect(desktop, SIGNAL(resized(int)), this, SLOT(UpdateGeometry(int)));
- if(DEBUG){ qDebug() << "Desktop #"<<Screen()<<" -> "<< LSession::desktop()->screenGeometry(Screen()) << LSession::handle()->screenGeom(Screen()); }
- deskMenu = new QMenu(0);
- connect(deskMenu, SIGNAL(triggered(QAction*)), this, SLOT(SystemApplication(QAction*)) );
- winMenu = new QMenu(0);
- winMenu->setTitle(tr("Window List"));
- winMenu->setIcon( LXDG::findIcon("preferences-system-windows","") );
- connect(winMenu, SIGNAL(triggered(QAction*)), this, SLOT(winClicked(QAction*)) );
- workspacelabel = new QLabel(0);
- workspacelabel->setAlignment(Qt::AlignCenter);
- wkspaceact = new QWidgetAction(0);
- wkspaceact->setDefaultWidget(workspacelabel);
- bgtimer = new QTimer(this);
- bgtimer->setSingleShot(true);
- connect(bgtimer, SIGNAL(timeout()), this, SLOT(UpdateBackground()) );
-
- connect(QApplication::instance(), SIGNAL(DesktopConfigChanged()), this, SLOT(SettingsChanged()) );
- connect(QApplication::instance(), SIGNAL(DesktopFilesChanged()), this, SLOT(UpdateDesktop()) );
- connect(QApplication::instance(), SIGNAL(LocaleChanged()), this, SLOT(LocaleChanged()) );
- connect(QApplication::instance(), SIGNAL(WorkspaceChanged()), this, SLOT(UpdateBackground()) );
- //if(DEBUG){ qDebug() << "Create bgWindow"; }
- /*bgWindow = new QWidget(); //LDesktopBackground();
- bgWindow->setObjectName("bgWindow");
- bgWindow->setContextMenuPolicy(Qt::CustomContextMenu);
- bgWindow->setFocusPolicy(Qt::StrongFocus);
- bgWindow->setWindowFlags(Qt::WindowStaysOnBottomHint | Qt::CustomizeWindowHint | Qt::FramelessWindowHint);
- LSession::handle()->XCB->SetAsDesktop(bgWindow->winId());
- bgWindow->setGeometry(LSession::handle()->screenGeom(Screen()));
- bgWindow->setWindowOpacity(0.0);
- connect(bgWindow, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(ShowMenu()) );*/
- if(DEBUG){ qDebug() << "Create bgDesktop"; }
- bgDesktop = new LDesktopPluginSpace();
- int grid = settings->value(DPREFIX+"GridSize",-1).toInt();
- if(grid<0 && LSession::desktop()->screenGeometry(Screen()).height() > 2000){ grid = 200; }
- else if(grid<0){ grid = 100; }
- bgDesktop->SetIconSize( grid );
- bgDesktop->setContextMenuPolicy(Qt::CustomContextMenu);
- //LSession::handle()->XCB->SetAsDesktop(bgDesktop->winId());
- connect(bgDesktop, SIGNAL(PluginRemovedByUser(QString)), this, SLOT(RemoveDeskPlugin(QString)) );
- connect(bgDesktop, SIGNAL(IncreaseIcons()), this, SLOT(IncreaseDesktopPluginIcons()) );
- connect(bgDesktop, SIGNAL(DecreaseIcons()), this, SLOT(DecreaseDesktopPluginIcons()) );
- connect(bgDesktop, SIGNAL(HideDesktopMenu()), deskMenu, SLOT(hide()));
- connect(bgDesktop, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(ShowMenu()) );
- if(DEBUG){ qDebug() << " - Desktop Init Done:" << screenID; }
- //Start the update processes
- QTimer::singleShot(10,this, SLOT(UpdateMenu()) );
- QTimer::singleShot(0,this, SLOT(UpdateBackground()) );
- QTimer::singleShot(1,this, SLOT(UpdateDesktop()) );
- QTimer::singleShot(2,this, SLOT(UpdatePanels()) );
-}
-
-void LDesktop::SettingsChanged(){
- if(issyncing){ return; } //don't refresh for internal modifications to the
- issyncing = true;
- qDebug() << "Found Settings Change:" << screenID;
- settings->sync(); //make sure to sync with external settings changes
- UpdateBackground();
- UpdateDesktop();
- UpdatePanels();
- UpdateMenu();
- issyncing = false;
- QTimer::singleShot(100, this, SLOT(UnlockSettings()) ); //give it a few moments to settle before performing another sync
-}
-
-void LDesktop::LocaleChanged(){
- //Update any elements which require a re-translation
- UpdateMenu(false); //do the full menu refresh
-}
-
-void LDesktop::UpdateMenu(bool fast){
- if(DEBUG){ qDebug() << " - Update Menu:" << screenID; }
- //Put a label at the top
- int num = LSession::handle()->XCB->CurrentWorkspace(); //LX11::GetCurrentDesktop();
- if(DEBUG){ qDebug() << "Found workspace number:" << num; }
- if(num < 0){ workspacelabel->setText( "<b>"+tr("Lumina Desktop")+"</b>"); }
- else{ workspacelabel->setText( "<b>"+QString(tr("Workspace %1")).arg(QString::number(num+1))+"</b>"); }
- if(fast && usewinmenu){ UpdateWinMenu(); }
- if(fast){ return; } //already done
- deskMenu->clear(); //clear it for refresh
- deskMenu->addAction(wkspaceact);
- deskMenu->addSeparator();
- //Now load the user's menu setup and fill the menu
- QStringList items = settings->value("menu/itemlist", QStringList()<< "terminal" << "filemanager" <<"applications" << "line" << "settings" ).toStringList();
- usewinmenu=false;
- for(int i=0; i<items.length(); i++){
- if(items[i]=="terminal"){ deskMenu->addAction(LXDG::findIcon("utilities-terminal",""), tr("Terminal"), this, SLOT(SystemTerminal()) ); }
- else if(items[i]=="lockdesktop"){ deskMenu->addAction(LXDG::findIcon("system-lock-screen",""), tr("Lock Session"), this, SLOT(SystemLock()) ); }
- else if(items[i]=="filemanager"){ deskMenu->addAction( LXDG::findIcon("user-home",""), tr("Browse Files"), this, SLOT(SystemFileManager()) ); }
- else if(items[i]=="applications"){ deskMenu->addMenu( LSession::handle()->applicationMenu() ); }
- else if(items[i]=="line"){ deskMenu->addSeparator(); }
- else if(items[i]=="settings"){ deskMenu->addMenu( LSession::handle()->settingsMenu() ); }
- else if(items[i]=="windowlist"){ deskMenu->addMenu( winMenu); usewinmenu=true;}
- else if(items[i].startsWith("app::::") && items[i].endsWith(".desktop")){
- //Custom *.desktop application
- QString file = items[i].section("::::",1,1).simplified();
- XDGDesktop xdgf(file);// = LXDG::loadDesktopFile(file, ok);
- if(xdgf.type!=XDGDesktop::BAD){
- deskMenu->addAction( LXDG::findIcon(xdgf.icon,""), xdgf.name)->setWhatsThis(file);
- }else{
- qDebug() << "Could not load application file:" << file;
- }
- }else if(items[i].startsWith("jsonmenu::::")){
- //Custom JSON menu system (populated on demand via external scripts/tools
- QStringList info = items[i].split("::::"); //FORMAT:[ "jsonmenu",exec,name, icon(optional)]
- if(info.length()>=3){
- qDebug() << "Custom JSON Menu Loaded:" << info;
- JsonMenu *tmp = new JsonMenu(info[1], deskMenu);
- tmp->setTitle(info[2]);
- connect(tmp, SIGNAL(triggered(QAction*)), this, SLOT(SystemApplication(QAction*)) );
- if(info.length()>=4){ tmp->setIcon( LXDG::findIcon(info[3],"") ); }
- deskMenu->addMenu(tmp);
- }
- }
- }
- //Now add the system quit options
- deskMenu->addSeparator();
- deskMenu->addAction(LXDG::findIcon("system-log-out",""), tr("Leave"), this, SLOT(SystemLogout()) );
-}
-
-void LDesktop::UpdateWinMenu(){
- winMenu->clear();
- //Get the current list of windows
- QList<WId> wins = LSession::handle()->XCB->WindowList();
- //Now add them to the menu
- for(int i=0; i<wins.length(); i++){
- LWinInfo info(wins[i]);
- bool junk;
- QAction *act = winMenu->addAction( info.icon(junk), info.text() );
- act->setData( QString::number(wins[i]) );
- }
-}
-
-void LDesktop::winClicked(QAction* act){
- LSession::handle()->XCB->ActivateWindow( act->data().toString().toULong() );
-}
-
-void LDesktop::UpdateDesktop(){
- if(DEBUG){ qDebug() << " - Update Desktop Plugins for screen:" << screenID; }
- QStringList plugins = settings->value(DPREFIX+"pluginlist", QStringList()).toStringList();
- if(defaultdesktop && plugins.isEmpty()){
- //plugins << "sample" << "sample" << "sample";
- }
- bool changed=false; //in case the plugin list needs to be changed
- //First make sure all the plugin names are unique
- for(int i=0; i<plugins.length(); i++){
- if(!plugins[i].contains("---") ){
- int num=1;
- while( plugins.contains(plugins[i]+"---"+QString::number(Screen())+"."+QString::number(num)) ){
- num++;
- }
- plugins[i] = plugins[i]+"---"+screenID+"."+QString::number(num);
- //plugins[i] = plugins[i]+"---"+QString::number(Screen())+"."+QString::number(num);
- changed=true;
- }
- }
- if(changed){
- //save the modified plugin list to file (so per-plugin settings are preserved)
- issyncing=true; //don't let the change cause a refresh
- settings->setValue(DPREFIX+"pluginlist", plugins);
- settings->sync();
- QTimer::singleShot(200, this, SLOT(UnlockSettings()) );
- }
- //If generating desktop file launchers, add those in
- QStringList filelist;
- if(settings->value(DPREFIX+"generateDesktopIcons",false).toBool()){
- QFileInfoList files = LSession::handle()->DesktopFiles();
- for(int i=0; i<files.length(); i++){
- filelist << files[i].absoluteFilePath();
- }
- }
- UpdateDesktopPluginArea();
- bgDesktop->LoadItems(plugins, filelist);
-}
-
-void LDesktop::RemoveDeskPlugin(QString ID){
- //This is called after a plugin is manually removed by the user
- // just need to ensure that the plugin is also removed from the settings file
- QStringList plugs = settings->value(DPREFIX+"pluginlist", QStringList()).toStringList();
- if(plugs.contains(ID)){
- plugs.removeAll(ID);
- issyncing=true; //don't let the change cause a refresh
- settings->setValue(DPREFIX+"pluginlist", plugs);
- settings->sync();
- QTimer::singleShot(200, this, SLOT(UnlockSettings()) );
- }
-}
-
-void LDesktop::IncreaseDesktopPluginIcons(){
- int cur = settings->value(DPREFIX+"GridSize",-1).toInt();
- if(cur<0 &&LSession::desktop()->screenGeometry(Screen()).height() > 2000){ cur = 200; }
- else if(cur<0){ cur = 100; }
- cur+=16;
- issyncing=true; //don't let the change cause a refresh
- settings->setValue(DPREFIX+"GridSize",cur);
- settings->sync();
- QTimer::singleShot(200, this, SLOT(UnlockSettings()) );
- bgDesktop->SetIconSize(cur);
-}
-
-void LDesktop::DecreaseDesktopPluginIcons(){
- int cur = settings->value(DPREFIX+"GridSize",-1).toInt();
- if(cur<0 &&LSession::desktop()->screenGeometry(Screen()).height() > 2000){ cur = 200; }
- else if(cur<0){ cur = 100; }
- if(cur<32){ return; } //cannot get smaller than 16x16
- cur-=16;
- issyncing=true; //don't let the change cause a refresh
- settings->setValue(DPREFIX+"GridSize",cur);
- settings->sync();
- QTimer::singleShot(200, this, SLOT(UnlockSettings()) );
- bgDesktop->SetIconSize(cur);
-}
-
-void LDesktop::UpdatePanels(){
- if(DEBUG){ qDebug() << " - Update Panels For Screen:" << Screen(); }
- int panels = settings->value(DPREFIX+"panels", -1).toInt();
- //if(panels==-1 && defaultdesktop){ panels=1; } //need at least 1 panel on the primary desktop
- //Remove all extra panels
- for(int i=0; i<PANELS.length(); i++){
- if(panels <= PANELS[i]->number()){
- if(DEBUG){ qDebug() << " -- Remove Panel:" << PANELS[i]->number(); }
- PANELS[i]->prepareToClose();
- PANELS.takeAt(i)->deleteLater();
- i--;
- }
- }
- for(int i=0; i<panels; i++){
- //Check for a panel with this number
- bool found = false;
- for(int p=0; p<PANELS.length() && !found; p++){
- if(PANELS[p]->number() == i){
- found = true;
- if(DEBUG){ qDebug() << " -- Update panel "<< i; }
- //panel already exists - just update it
- QTimer::singleShot(0, PANELS[p], SLOT(UpdatePanel()) );
- }
- }
- if(!found){
- if(DEBUG){ qDebug() << " -- Create panel "<< i; }
- //New panel
- LPanel *pan = new LPanel(settings, screenID, i, bgDesktop);
- PANELS << pan;
- pan->show();
- }
- }
- //Give it a 1/2 second before ensuring that the visible desktop area is correct
- QTimer::singleShot(500, this, SLOT(UpdateDesktopPluginArea()) );
-}
-
-void LDesktop::UpdateDesktopPluginArea(){
- QRegion visReg(LSession::desktop()->screenGeometry(Screen()) ); //visible region (not hidden behind a panel)
- QRect rawRect = visReg.boundingRect(); //initial value (screen size)
- //qDebug() << "Update Desktop Plugin Area:" << bgWindow->geometry();
- for(int i=0; i<PANELS.length(); i++){
- QRegion shifted = visReg;
- QString loc = settings->value(PANELS[i]->prefix()+"location","top").toString().toLower();
- int vis = PANELS[i]->visibleWidth();
- if(loc=="top"){
- if(!shifted.contains(QRect(rawRect.x(), rawRect.y(), rawRect.width(), vis))){ continue; }
- shifted.translate(0, (rawRect.top()+vis)-shifted.boundingRect().top() );
- }else if(loc=="bottom"){
- if(!shifted.contains(QRect(rawRect.x(), rawRect.bottom()-vis, rawRect.width(), vis))){ continue; }
- shifted.translate(0, (rawRect.bottom()-vis)-shifted.boundingRect().bottom());
- }else if(loc=="left"){
- if( !shifted.contains(QRect(rawRect.x(), rawRect.y(), vis,rawRect.height())) ){ continue; }
- shifted.translate((rawRect.left()+vis)-shifted.boundingRect().left() ,0);
- }else{ //right
- if(!shifted.contains(QRect(rawRect.right()-vis, rawRect.y(), vis,rawRect.height())) ){ continue; }
- shifted.translate((rawRect.right()-vis)-shifted.boundingRect().right(),0);
- }
- visReg = visReg.intersected( shifted );
- }
- //Now make sure the desktop plugin area is only the visible area
- QRect rec = visReg.boundingRect();
- //qDebug() << " - DPArea: Panel-Adjusted rectangle:" << rec;
- //LSession::handle()->XCB->SetScreenWorkArea((unsigned int) Screen(), rec);
- //Now remove the X offset to place it on the current screen (needs widget-coords, not global)
- globalWorkRect = rec; //save this for later
- rec.moveTopLeft( QPoint( rec.x()-LSession::desktop()->screenGeometry(Screen()).x() , rec.y()-LSession::desktop()->screenGeometry(Screen()).y() ) );
- //qDebug() << "DPlug Area:" << rec << bgDesktop->geometry() << LSession::handle()->desktop()->availableGeometry(bgDesktop);
- if(rec.size().isNull() || rec == bgDesktop->geometry()){return; } //nothing changed
- bgDesktop->setGeometry( LSession::desktop()->screenGeometry(Screen()));
- bgDesktop->setDesktopArea( rec );
- bgDesktop->UpdateGeom(); //just in case the plugin space itself needs to do anything
- QTimer::singleShot(10, this, SLOT(UpdateBackground()) );
- //Re-paint the panels (just in case a plugin was underneath it and the panel is transparent)
- //for(int i=0; i<PANELS.length(); i++){ PANELS[i]->update(); }
- //Make sure to re-disable any WM control flags
- LSession::handle()->XCB->SetDisableWMActions(bgDesktop->winId());
-}
-
-void LDesktop::UpdateBackground(){
- //Get the current Background
- if(bgupdating || bgDesktop==0){ return; } //prevent multiple calls to this at the same time
- bgupdating = true;
- if(DEBUG){ qDebug() << " - Update Desktop Background for screen:" << Screen(); }
- //Get the list of background(s) to show
- QStringList bgL = settings->value(DPREFIX+"background/filelist-workspace-"+QString::number( LSession::handle()->XCB->CurrentWorkspace()), QStringList()).toStringList();
- if(bgL.isEmpty()){ bgL = settings->value(DPREFIX+"background/filelist", QStringList()).toStringList(); }
-
- //qDebug() << " - List:" << bgL << CBG;
- //Remove any invalid files
- for(int i=0; i<bgL.length(); i++){
- if( (!QFile::exists(bgL[i]) && bgL[i]!="default" && !bgL[i].startsWith("rgb(") ) || bgL[i].isEmpty()){ bgL.removeAt(i); i--; }
- }
- if(bgL.isEmpty()){ bgL << "default"; } //always fall back on the default
- //Determine if the background needs to be changed
- //qDebug() << "BG List:" << bgL << oldBGL << CBG << bgtimer->isActive();
- if(bgL==oldBGL && !CBG.isEmpty() && bgtimer->isActive()){
- //No background change scheduled - just update the widget
- bgDesktop->update();
- bgupdating=false;
- return;
- }
- oldBGL = bgL; //save this for later
- //Determine which background to use next
- int index ( qrand() % bgL.length() );
- if(index== bgL.indexOf(CBG)){ //if the current wallpaper was selected by the randomization again
- //Go to the next in the list
- if(index < 0 || index >= bgL.length()-1){ index = 0; } //if invalid or last item in the list - go to first
- else{ index++; } //go to next
- }
- QString bgFile = bgL[index];
- //Save this file as the current background
- CBG = bgFile;
- //qDebug() << " - Set Background to:" << CBG << index << bgL;
- if( (bgFile.toLower()=="default")){ bgFile = LOS::LuminaShare()+"desktop-background.jpg"; }
- //Now set this file as the current background
- QString format = settings->value(DPREFIX+"background/format","stretch").toString();
- //bgWindow->setBackground(bgFile, format);
- QPixmap backPix = LDesktopBackground::setBackground(bgFile, format, LSession::handle()->screenGeom(Screen()));
- bgDesktop->setBackground(backPix);
- //Now reset the timer for the next change (if appropriate)
- if(bgtimer->isActive()){ bgtimer->stop(); }
- if(bgL.length() > 1){
- //get the length of the timer (in minutes)
- int min = settings->value(DPREFIX+"background/minutesToChange",5).toInt();
- //restart the internal timer
- if(min > 0){
- bgtimer->start(min*60000); //convert from minutes to milliseconds
- }
- }
- //Now update the panel backgrounds
- for(int i=0; i<PANELS.length(); i++){
- PANELS[i]->update();
- PANELS[i]->show();
- }
- bgupdating=false;
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/LDesktop.h b/src-qt5/core/lumina-desktop-unified/src-DE/LDesktop.h
deleted file mode 100644
index b6034c18..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/LDesktop.h
+++ /dev/null
@@ -1,107 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2012-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_DESKTOP_LDESKTOP_H
-#define _LUMINA_DESKTOP_LDESKTOP_H
-
-#include <QCoreApplication>
-
-
-#include <QSettings>
-#include <QFile>
-#include <QList>
-#include <QDebug>
-#include <QTimer>
-#include <QFileSystemWatcher>
-#include <QLabel>
-#include <QWidgetAction>
-#include <QMdiArea>
-#include <QMdiSubWindow>
-#include <QRegion>
-
-
-#include <LuminaXDG.h>
-
-#include "LPanel.h"
-//#include "Globals.h"
-#include "AppMenu.h"
-#include "LDesktopPluginSpace.h"
-#include "desktop-plugins/LDPlugin.h"
-//#include "desktop-plugins/NewDP.h"
-#include "LDesktopBackground.h"
-
-class LDesktop : public QObject{
- Q_OBJECT
-public:
- LDesktop(int deskNum=0, bool setdefault = false);
- ~LDesktop();
-
- int Screen(); //return the screen number this object is managing
- void show();
- void hide();
- void prepareToClose();
-
- WId backgroundID();
- QRect availableScreenGeom();
-
- void UpdateGeometry();
-
-public slots:
- void SystemLock();
- void SystemLogout();
- void SystemTerminal();
- void SystemFileManager();
- void SystemApplication(QAction*);
-
- void checkResolution();
-
-private:
- QSettings *settings;
- QTimer *bgtimer;
- //QDesktopWidget *desktop;
- QString DPREFIX, screenID;
- //int desktopnumber;
- QRegion availDPArea;
- bool defaultdesktop, issyncing, usewinmenu, bgupdating;
- QStringList oldBGL;
- QList<LPanel*> PANELS;
- LDesktopPluginSpace *bgDesktop; //desktop plugin area
- //QWidget *bgWindow; //full screen background
- QMenu *deskMenu, *winMenu;
- QLabel *workspacelabel;
- QWidgetAction *wkspaceact;
- QList<LDPlugin*> PLUGINS;
- QString CBG; //current background
- QRect globalWorkRect;
-
-private slots:
- void InitDesktop();
- void SettingsChanged();
- void UnlockSettings(){ issyncing=false; }
- void LocaleChanged();
-
- //Menu functions
- void UpdateMenu(bool fast = false);
- void ShowMenu(){
- UpdateMenu(true); //run the fast version
- deskMenu->popup(QCursor::pos()); //}
- }
- void UpdateWinMenu();
- void winClicked(QAction*);
-
- //Desktop plugin system functions
- void UpdateDesktop();
- void RemoveDeskPlugin(QString);
- void IncreaseDesktopPluginIcons();
- void DecreaseDesktopPluginIcons();
-
- void UpdatePanels();
-
- void UpdateDesktopPluginArea(); //make sure the area is not underneath any panels
-
- void UpdateBackground();
-};
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/LDesktopBackground.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/LDesktopBackground.cpp
deleted file mode 100644
index 6b458c24..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/LDesktopBackground.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2016, Henry Hu
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LDesktopBackground.h"
-
-#include <QPainter>
-#include <QPaintEvent>
-#include <QDebug>
-
-#include "LSession.h"
-
-void LDesktopBackground::paintEvent(QPaintEvent *ev) {
- //return; //do nothing - always invisible
- if (bgPixmap != NULL) {
- //qDebug() << "Wallpaper paint Event:" << ev->rect();
- //QPainter painter(this);
- //painter.setBrush(*bgPixmap);
- //painter.drawRect(ev->rect().adjusted(-1,-1,2,2));
- }else{
- QWidget::paintEvent(ev);
- }
-}
-
-QPixmap LDesktopBackground::setBackground(const QString& bgFile, const QString& format, QRect geom) {
- //if (bgPixmap != NULL) delete bgPixmap;
- QPixmap bgPixmap(geom.size());// = new QPixmap(size());
-
- if (bgFile.startsWith("rgb(")) {
- QStringList colors = bgFile.section(")",0,0).section("(",1,1).split(",");
- QColor color = QColor(colors[0].toInt(), colors[1].toInt(), colors[2].toInt());
- bgPixmap.fill(color);
- } else {
- bgPixmap.fill(Qt::black);
-
- // Load the background file and scale
- QPixmap bgImage(bgFile);
- if (format == "stretch" || format == "full" || format == "fit") {
- Qt::AspectRatioMode mode;
- if (format == "stretch") {
- mode = Qt::IgnoreAspectRatio;
- } else if (format == "full") {
- mode = Qt::KeepAspectRatioByExpanding;
- } else {
- mode = Qt::KeepAspectRatio;
- }
- if(bgImage.height() != geom.height() && bgImage.width() != geom.width() ){ bgImage = bgImage.scaled(geom.size(), mode); }
- //bgImage = bgImage.scaled(size(), mode);
- }
-
- // Calculate the offset
- int dx = 0, dy = 0;
- int drawWidth = bgImage.width(), drawHeight = bgImage.height();
- if (format == "fit" || format == "center" || format == "full") {
- dx = (geom.width() - bgImage.width()) / 2;
- dy = (geom.height() - bgImage.height()) / 2;
- } else if (format == "tile") {
- drawWidth = geom.width();
- drawHeight = geom.height();
- } else {
- if (format.endsWith("right")) {
- dx = geom.width() - bgImage.width();
- }
- if (format.startsWith("bottom")) {
- dy = geom.height() - bgImage.height();
- }
- }
-
- // Draw the background image
- QPainter painter(&bgPixmap);
- painter.setBrush(bgImage);
- painter.setBrushOrigin(dx, dy);
- painter.drawRect(dx, dy, drawWidth, drawHeight);
- }
- //this->repaint(); //make sure the entire thing gets repainted right away
- //LSession::handle()->XCB->paintRoot(geom, &bgPixmap);
- return bgPixmap;
- //show();
-}
-
-LDesktopBackground::LDesktopBackground() : QWidget() {
- bgPixmap = NULL;
- this->setWindowOpacity(0);
-}
-
-LDesktopBackground::~LDesktopBackground() {
- if (bgPixmap != NULL) delete bgPixmap;
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/LDesktopBackground.h b/src-qt5/core/lumina-desktop-unified/src-DE/LDesktopBackground.h
deleted file mode 100644
index a2e46748..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/LDesktopBackground.h
+++ /dev/null
@@ -1,27 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2016, Henry Hu
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_DESKTOP_LDESKTOPBACKGROUND_H_
-#define _LUMINA_DESKTOP_LDESKTOPBACKGROUND_H_
-
-#include <QString>
-#include <QWidget>
-#include <QPixmap>
-
-class LDesktopBackground: public QWidget {
- Q_OBJECT
-public:
- LDesktopBackground();
- virtual ~LDesktopBackground();
-
- virtual void paintEvent(QPaintEvent*);
- static QPixmap setBackground(const QString&, const QString&, QRect geom);
-
-private:
- QPixmap *bgPixmap;
-};
-
-#endif // _LUMINA_DESKTOP_LDESKTOPBACKGROUND_H_
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/LDesktopPluginSpace.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/LDesktopPluginSpace.cpp
deleted file mode 100644
index 18126dfa..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/LDesktopPluginSpace.cpp
+++ /dev/null
@@ -1,333 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LDesktopPluginSpace.h"
-#include "LSession.h"
-#include "desktop-plugins/NewDP.h"
-
-#include <LuminaXDG.h>
-#include <QDesktopWidget>
-
-#define DEBUG 0
-
-// ===================
-// PUBLIC
-// ===================
-LDesktopPluginSpace::LDesktopPluginSpace() : QWidget(){
- this->setObjectName("LuminaDesktopPluginSpace");
- this->setAttribute(Qt::WA_TranslucentBackground);
- //this->setAttribute(Qt::WA_NoSystemBackground);
- this->setAutoFillBackground(false);
- this->setStyleSheet("QWidget#LuminaDesktopPluginSpace{ border: none; background: transparent; }");
- this->setWindowFlags(Qt::WindowStaysOnBottomHint | Qt::CustomizeWindowHint | Qt::FramelessWindowHint);
- this->setAcceptDrops(true);
- this->setContextMenuPolicy(Qt::NoContextMenu);
- this->setMouseTracking(true);
- TopToBottom = true;
- GRIDSIZE = 100.0; //default value if not set
- plugsettings = LSession::handle()->DesktopPluginSettings();
- LSession::handle()->XCB->SetAsDesktop(this->winId());
- //this->setWindowOpacity(0.0);
-}
-
-LDesktopPluginSpace::~LDesktopPluginSpace(){
-
-}
-
-void LDesktopPluginSpace::LoadItems(QStringList plugs, QStringList files){
- if(DEBUG){ qDebug() << "Loading Desktop Items:" << plugs << files << "Area:" << this->size() << GRIDSIZE; }
- bool changes = false;
- if(plugs != plugins){ plugins = plugs; changes = true; }
- if(files != deskitems){ deskitems = files; changes = true; }
- if(changes){ QTimer::singleShot(0,this, SLOT(reloadPlugins())); }
- this->show();
-}
-
-void LDesktopPluginSpace::SetIconSize(int size){
- if(DEBUG){ qDebug() << "Set Desktop Icon Size:" << size; }
- //QSize newsize = calculateItemSize(size);
- int oldsize = GRIDSIZE;
- GRIDSIZE = size; //turn the int into a float;
- //itemSize = QSize(1,1); //save this for all the later icons which are generated (grid size)
- UpdateGeom(oldsize);
- //Now re-set the item icon size
- //reloadPlugins(true);
-}
-
-void LDesktopPluginSpace::cleanup(){
- //Perform any final cleanup actions here
- for(int i=0; i<ITEMS.length(); i++){
- ITEMS.takeAt(i)->deleteLater();
- i--;
- }
- plugins.clear();
- deskitems.clear();
- this->hide();
-}
-
-void LDesktopPluginSpace::setBackground(QPixmap pix){
- wallpaper = pix;
- this->repaint();
-}
-
-void LDesktopPluginSpace::setDesktopArea(QRect area){
- desktopRect = area;
-}
-
-// ===================
-// PUBLIC SLOTS
-// ===================
-void LDesktopPluginSpace::UpdateGeom(int oldgrid){
- if(DEBUG){ qDebug() << "Updated Desktop Geom:" << desktopRect.size() << GRIDSIZE << desktopRect.size()/GRIDSIZE; }
- //Go through and check the locations/sizes of all items (particularly the ones on the bottom/right edges)
- //bool reload = false;
- for(int i=0; i<ITEMS.length(); i++){
- QRect grid = geomToGrid(ITEMS[i]->geometry(), oldgrid);
- if(DEBUG){ qDebug() << " - Check Plugin:" << ITEMS[i]->whatsThis() << grid; }
- if( !ValidGrid(grid) ){
- //This plugin is too far out of the screen - find new location for it
- if(DEBUG){ qDebug() << " -- Out of bounds - Find a new spot"; }
- grid = findOpenSpot(grid, ITEMS[i]->whatsThis(), true); //Reverse lookup spot
- }
- if(!ValidGrid(grid)){
- qDebug() << "No Place for plugin:" << ITEMS[i]->whatsThis();
- qDebug() << " - Removing it for now...";
- ITEMS.takeAt(i)->deleteLater();
- i--;
- }else{
- //NOTE: We are not doing the ValidGeometry() checks because we are only resizing existing plugin with pre-set & valid grid positions
- grid = gridToGeom(grid); //convert to pixels before saving/sizing
- MovePlugin(ITEMS[i], grid);
- /*ITEMS[i]->setGeometry( grid );
- ITEMS[i]->setFixedSize(grid.size());
- ITEMS[i]->savePluginGeometry(grid);*/
- }
- }
- //if(reload){ QTimer::singleShot(0,this, SLOT(reloadPlugins())); }
-}
-
-// ===================
-// PRIVATE
-// ===================
-void LDesktopPluginSpace::addDesktopItem(QString filepath){
- addDesktopPlugin("applauncher::"+filepath+"---dlink"+QString::number(LSession::handle()->desktop()->screenNumber(this)) );
-}
-
-void LDesktopPluginSpace::addDesktopPlugin(QString plugID){
- //This is used for generic plugins (QWidget-based)
- if(DEBUG){ qDebug() << "Adding Desktop Plugin:" << plugID; }
- LDPlugin *plug = NewDP::createPlugin(plugID, this);
- if(plug==0){ return; } //invalid plugin
- //plug->setAttribute(Qt::WA_TranslucentBackground);
- plug->setWhatsThis(plugID);
- //Now get the geometry for the plugin
- QRect geom = plug->loadPluginGeometry(); //in pixel coords
- if(!geom.isNull()){ geom = geomToGrid(geom); } //convert to grid coordinates
- if(geom.isNull()){
- //No previous location - need to calculate initial geom
- QSize sz = plug->defaultPluginSize(); //in grid coordinates
- geom.setSize(sz);
- //if an applauncher - add from top-left, otherwise add in from bottom-right
- if(plugID.startsWith("applauncher")){ geom = findOpenSpot(geom.width(), geom.height() ); }
- else{ geom = findOpenSpot(geom.width(), geom.height(), RoundUp(this->height()/GRIDSIZE), RoundUp(this->width()/GRIDSIZE), true); }
- }else if(!ValidGeometry(plugID, gridToGeom(geom)) ){
- //Find a new location for the plugin (saved location is invalid)
- geom = findOpenSpot(geom.width(), geom.height(), geom.y(), geom.x(), false); //try to get it within the same general area first
- }
- if(geom.x() < 0 || geom.y() < 0){
- qDebug() << "No available space for desktop plugin:" << plugID << " - IGNORING";
- delete plug;
- }else{
- if(DEBUG){ qDebug() << " - New Plugin Geometry (grid):" << geom; }
- //Now place the item in the proper spot/size
- MovePlugin(plug, gridToGeom(geom));
- //plug->setGeometry( gridToGeom(geom) );
- plug->show();
- if(DEBUG){ qDebug() << " - New Plugin Geometry (px):" << plug->geometry(); }
- ITEMS << plug;
- connect(plug, SIGNAL(StartMoving(QString)), this, SLOT(StartItemMove(QString)) );
- connect(plug, SIGNAL(StartResizing(QString)), this, SLOT(StartItemResize(QString)) );
- connect(plug, SIGNAL(RemovePlugin(QString)), this, SLOT(RemoveItem(QString)) );
- connect(plug, SIGNAL(IncreaseIconSize()), this, SIGNAL(IncreaseIcons()) );
- connect(plug, SIGNAL(DecreaseIconSize()), this, SIGNAL(DecreaseIcons()) );
- connect(plug, SIGNAL(CloseDesktopMenu()), this, SIGNAL(HideDesktopMenu()) );
- }
-}
-
-QRect LDesktopPluginSpace::findOpenSpot(int gridwidth, int gridheight, int startRow, int startCol, bool reversed, QString plugID){
- //Note about the return QPoint: x() is the column number, y() is the row number
- QPoint pt(0,0);
- //qDebug() << "FIND OPEN SPOT:" << gridwidth << gridheight << startRow << startCol << reversed;
- int row = startRow; int col = startCol;
- if(row<0){ row = 0; } //just in case - since this can be recursively called
- if(col<0){ col = 0; } //just in case - since this can be recursively called
- bool found = false;
- int rowCount, colCount;
- rowCount = RoundUp(desktopRect.height()/GRIDSIZE);
- colCount = RoundUp(desktopRect.width()/GRIDSIZE);
- if( (row+gridheight)>rowCount){ row = rowCount-gridheight; startRow = row; }
- if( (col+gridwidth)>colCount){ col = colCount-gridwidth; startCol = col; }
- QRect geom(0, 0, gridwidth*GRIDSIZE, gridheight*GRIDSIZE); //origin point will be adjusted in a moment
- if(DEBUG){ qDebug() << "Search for plugin space:" << rowCount << colCount << gridheight << gridwidth << this->size(); }
- if(TopToBottom && reversed && (startRow>0 || startCol>0) ){
- //Arrange Top->Bottom (work backwards)
- //qDebug() << "Search backwards for space:" << rowCount << colCount << startRow << startCol << gridheight << gridwidth;
- while(col>=0 && !found){
- while(row>=0 && !found){
- bool ok = true;
- geom.moveTo(col*GRIDSIZE, row*GRIDSIZE);
- //qDebug() << " - Check Geom:" << geom << col << row;
- //Check all the existing items to ensure no overlap
- for(int i=0; i<ITEMS.length() && ok; i++){
- if(ITEMS[i]->whatsThis()==plugID){ continue; } //same plugin - this is not a conflict
- if(geom.intersects(ITEMS[i]->geometry())){
- //Collision - move the next searchable row/column index
- ok = false;
- //qDebug() << "Collision:" << col << row;
- row = ((ITEMS[i]->geometry().y()-GRIDSIZE/2)/GRIDSIZE) -gridheight; //use top edge for next search (minus item height)
- //qDebug() << " - new row:" << row;
- }
- }
- if(ok){ pt = QPoint(col,row); found = true; } //found an open spot
- }
- if(!found){ col--; row=rowCount-gridheight; } //go to the previous column
- }
- }else if(TopToBottom){
- //Arrange Top->Bottom
- while(col<(colCount-gridwidth) && !found){
- while(row<(rowCount-gridheight) && !found){
- bool ok = true;
- geom.moveTo(col*GRIDSIZE, row*GRIDSIZE);
- //qDebug() << " - Check Geom:" << geom << col << row;
- //Check all the existing items to ensure no overlap
- for(int i=0; i<ITEMS.length() && ok; i++){
- if(ITEMS[i]->whatsThis()==plugID){ continue; } //same plugin - this is not a conflict
- if(geom.intersects(ITEMS[i]->geometry())){
- //Collision - move the next searchable row/column index
- ok = false;
- row = posToGrid(ITEMS[i]->geometry().bottomLeft()).y(); //use bottom edge for next search
- }
- }
- if(ok){ pt = QPoint(col,row); found = true; } //found an open spot
- //else{ row++; }
- }
- if(!found){ col++; row=0; } //go to the next column
- }
- }else if(reversed && (startRow>0 || startCol>0) ){
- //Arrange Left->Right (work backwards)
- while(row>=0 && !found){
- while(col>=0 && !found){
- bool ok = true;
- geom.moveTo(col*GRIDSIZE, row*GRIDSIZE);
- //Check all the existing items to ensure no overlap
- for(int i=0; i<ITEMS.length() && ok; i++){
- if(ITEMS[i]->whatsThis()==plugID){ continue; } //same plugin - this is not a conflict
- if(geom.intersects(ITEMS[i]->geometry())){
- //Collision - move the next searchable row/column index
- ok = false;
- col = (ITEMS[i]->geometry().x()-GRIDSIZE/2)/GRIDSIZE - gridwidth; // Fill according to row/column
- }
- }
- if(ok){ pt = QPoint(col,row); found = true; } //found an open spot
- //else{ col++; }
- }
- if(!found){ row--; col=colCount-gridwidth;} //go to the previous row
- }
- }else{
- //Arrange Left->Right
- while(row<(rowCount-gridheight) && !found){
- while(col<(colCount-gridwidth) && !found){
- bool ok = true;
- geom.moveTo(col*GRIDSIZE, row*GRIDSIZE);
- //Check all the existing items to ensure no overlap
- for(int i=0; i<ITEMS.length() && ok; i++){
- if(ITEMS[i]->whatsThis()==plugID){ continue; } //same plugin - this is not a conflict
- if(geom.intersects(ITEMS[i]->geometry())){
- //Collision - move the next searchable row/column index
- ok = false;
- col = posToGrid(ITEMS[i]->geometry().topRight()).x(); // Fill according to row/column
- }
- }
- if(ok){ pt = QPoint(col,row); found = true; } //found an open spot
- //else{ col++; }
- }
- if(!found){ row++; col=0;} //go to the next row
- }
- }
- if(!found){
- //qDebug() << "Could not find a spot:" << startRow << startCol << gridheight << gridwidth;
- if( (startRow!=0 || startCol!=0) && !reversed){
- //Did not check the entire screen yet - gradually work it's way back to the top/left corner
- //qDebug() << " - Start backwards search";
- return findOpenSpot(gridwidth, gridheight,startRow,startCol, true); //reverse the scan
- }else if(gridwidth>1 && gridheight>1){
- //Decrease the size of the item by 1x1 grid points and try again
- //qDebug() << " - Out of space: Decrease item size and try again...";
- return findOpenSpot(gridwidth-1, gridheight-1, 0, 0);
- }else{
- //qDebug() << " - Could not find an open spot for a desktop plugin:" << gridwidth << gridheight << startRow << startCol;
- return QRect(-1,-1,-1,-1);
- }
- }else{
- return QRect(pt,QSize(gridwidth,gridheight));
- }
-}
-
-QRect LDesktopPluginSpace::findOpenSpot(QRect grid, QString plugID, bool recursive){ //Reverse lookup spotc{
- //This is just an overloaded simplification for checking currently existing plugins
- return findOpenSpot(grid.width(), grid.height(), grid.y(), grid.x(), recursive, plugID);
-}
-
-// ===================
-// PRIVATE SLOTS
-// ===================
-void LDesktopPluginSpace::reloadPlugins(bool ForceIconUpdate ){
- //Remove any plugins as necessary
- QStringList plugs = plugins;
- QStringList items = deskitems;
- for(int i=0; i<ITEMS.length(); i++){
-
- if( ITEMS[i]->whatsThis().startsWith("applauncher") && ForceIconUpdate){
- //Change the size of the existing plugin - preserving the location if possible
- /*QRect geom = ITEMS[i]->loadPluginGeometry(); //pixel coords
- if(!geom.isNull()){
- geom = geomToGrid(geom); //convert to grid coords
- geom.setSize(itemSize); //Reset back to default size (does not change location)
- ITEMS[i]->savePluginGeometry( gridToGeom(geom)); //save it back in pixel coords
- }*/
- //Now remove the plugin for the moment - run it through the re-creation routine below
- ITEMS.takeAt(i)->deleteLater();
- i--;
- }
- else if(plugs.contains(ITEMS[i]->whatsThis())){ plugs.removeAll(ITEMS[i]->whatsThis()); }
- else if(items.contains(ITEMS[i]->whatsThis().section("---",0,0).section("::",1,50))){ items.removeAll(ITEMS[i]->whatsThis().section("---",0,0).section("::",1,50)); }
- else{ ITEMS[i]->removeSettings(true); ITEMS.takeAt(i)->deleteLater(); i--; } //this is considered a permanent removal (cleans settings)
- }
-
- //Now create any new items
- //First load the plugins (almost always have fixed locations)
- for(int i=0; i<plugs.length(); i++){
- addDesktopPlugin(plugs[i]);
- }
- //Now load the desktop shortcuts (fill in the gaps as needed)
- for(int i=0; i<items.length(); i++){
- addDesktopItem(items[i]);
- }
-}
-
-
-//=================
-// PROTECTED
-//=================
-void LDesktopPluginSpace::paintEvent(QPaintEvent*ev){
- if(!wallpaper.isNull()){
- QPainter painter(this);
- painter.setBrush(wallpaper);
- painter.drawRect(ev->rect().adjusted(-1,-1,2,2));
- }else{
- QWidget::paintEvent(ev);
- }
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/LDesktopPluginSpace.h b/src-qt5/core/lumina-desktop-unified/src-DE/LDesktopPluginSpace.h
deleted file mode 100644
index abc34878..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/LDesktopPluginSpace.h
+++ /dev/null
@@ -1,303 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_DESKTOP_LDESKTOP_PLUGIN_SPACE_H
-#define _LUMINA_DESKTOP_LDESKTOP_PLUGIN_SPACE_H
-
-#include <QListWidget>
-#include <QDropEvent>
-#include <QDrag> //includes all the QDrag*Event classes
-#include <QUrl>
-#include <QMimeData>
-#include <QSettings>
-#include <QDebug>
-#include <QFile>
-#include <QDir>
-#include <QFileInfo>
-#include <QProcess>
-
-#include "desktop-plugins/LDPlugin.h"
-
-#define MIMETYPE QString("x-special/lumina-desktop-plugin")
-
-class LDesktopPluginSpace : public QWidget{
- Q_OBJECT
-
-signals:
- void PluginRemovedByUser(QString ID);
- void IncreaseIcons(); //increase default icon sizes
- void DecreaseIcons(); //decrease default icon sizes
- void HideDesktopMenu();
-
-public:
- LDesktopPluginSpace();
- ~LDesktopPluginSpace();
-
- void LoadItems(QStringList plugs, QStringList files);
- //void setShowGrid(bool show); This is already implemented in QTableView (inherited)
- void SetIconSize(int size);
- void ArrangeTopToBottom(bool ttb); //if false, will arrange left->right
- void cleanup();
-
- void setBackground(QPixmap pix); //should already be sized appropriately for this widget
- void setDesktopArea(QRect area);
-
-public slots:
- void UpdateGeom(int oldgrid = -1);
-
-private:
- QSettings *plugsettings;
- QStringList plugins, deskitems;
- QList<LDPlugin*> ITEMS;
- QPixmap wallpaper;
- QRect desktopRect;
- bool TopToBottom;
- float GRIDSIZE;
-
- int RoundUp(double num){
- int out = num; //This will truncate the number
- if(out < num){ out++; } //need to increase by 1
- return out;
- }
-
- void addDesktopItem(QString filepath); //This will convert it into a valid Plugin ID automatically
- void addDesktopPlugin(QString plugID);
-
-
- QRect findOpenSpot(int gridwidth = 1, int gridheight = 1, int startRow = 0, int startCol = 0, bool reversed = false, QString plugID = "");
- QRect findOpenSpot(QRect grid, QString plugID, bool recursive = false);
-
- QPoint posToGrid(QPoint pos){
- //This assumes a point in widget-relative coordinates
- pos.setX( RoundUp(pos.x()/GRIDSIZE));
- pos.setY( RoundUp(pos.y()/GRIDSIZE));
- return pos;
- }
-
- QRect geomToGrid(QRect geom, int grid = -1){
- if(grid<0){
- //use the current grid size
- return QRect( RoundUp(geom.x()/GRIDSIZE), RoundUp(geom.y()/GRIDSIZE), \
- RoundUp(geom.width()/GRIDSIZE), RoundUp(geom.height()/GRIDSIZE) );
- }else{
- //use the input grid size
- return QRect( RoundUp(geom.x()/((double) grid)), RoundUp(geom.y()/((double) grid)), \
- RoundUp(geom.width()/((double) grid)), RoundUp(geom.height()/((double) grid)) );
- }
- }
-
- QRect gridToGeom(QRect grid){
- //This function incorporates the bottom/right edge matchins procedures (for incomplete last grid)
- QRect geom(grid.x()*GRIDSIZE, grid.y()*GRIDSIZE, grid.width()*GRIDSIZE, grid.height()*GRIDSIZE);
- //Now check the edge conditions (last right/bottom grid points might be smaller than GRIDSIZE)
- QSize areaSize = desktopRect.size(); //use the size of the area instead of the geometry - because we need this in child coordinates like "geom" above
- //qDebug() << "GridToGeom:" << grid << geom << "Area size:" << areaSize;
- if(geom.right() > areaSize.width() && (geom.right()-areaSize.width())<GRIDSIZE ){
- geom.setRight(areaSize.width()-1); //match up with the edge
- }
- if(geom.bottom() > areaSize.height() && (geom.bottom() -areaSize.height())<GRIDSIZE ){
- geom.setBottom(areaSize.height()-1); //match up with the edge
- }
- //qDebug() << " - Adjusted:" << geom;
- return geom;
- }
-
- //Internal simplification for setting up a drag event
- void setupDrag(QString id, QString type){
- QMimeData *mime = new QMimeData;
- mime->setData(MIMETYPE, QString(type+"::::"+id).toLocal8Bit() );
- //If this is a desktop file - also add it to the generic URI list mimetype
- if(id.startsWith("applauncher::")){
- QList<QUrl> urilist;
- urilist << QUrl::fromLocalFile( id.section("---",0,0).section("::",1,50) );
- mime->setUrls(urilist);
- }
- //Create the drag structure
- QDrag *drag = new QDrag(this);
- drag->setMimeData(mime);
- drag->exec(Qt::CopyAction);
- }
-
- bool ValidGrid(QRect grid){
- //qDebug() << "Check Valid Grid:" << grid << RoundUp(this->width()/GRIDSIZE) << RoundUp(this->height()/GRIDSIZE);
- //This just checks that the grid coordinates are not out of bounds - should still run ValidGeometry() below with the actual pixel geom
- if(grid.x()<0 || grid.y()<0 || grid.width()<0 || grid.height()<0){ return false; }
- else if( (grid.x()+grid.width()) > RoundUp(desktopRect.width()/GRIDSIZE) ){ return false; }
- else if( (grid.y()+grid.height()) > RoundUp(desktopRect.height()/GRIDSIZE) ){ return false; }
- return true;
- }
-
- bool ValidGeometry(QString id, QRect geom){
- //First check that it is within the desktop area completely
- // Note that "this->geometry()" is not in the same coordinate space as the geometry inputs
- if(!QRect(0,0,desktopRect.width(), desktopRect.height()).contains(geom)){ return false; }
- //Now check that it does not collide with any other items
- for(int i=0; i<ITEMS.length(); i++){
- if(ITEMS[i]->whatsThis()==id){ continue; }
- else if(geom.intersects(ITEMS[i]->geometry())){ return false; }
- }
- return true;
- }
-
- LDPlugin* ItemFromID(QString ID){
- for(int i=0; i<ITEMS.length(); i++){
- if(ITEMS[i]->whatsThis()==ID){ return ITEMS[i]; }
- }
- return 0;
- }
-
- void MovePlugin(LDPlugin* plug, QRect geom){
- plug->setGeometry( geom );
- plug->setFixedSize(geom.size()); //needed for some plugins
- plug->savePluginGeometry(geom);
- }
-
-private slots:
- void reloadPlugins(bool ForceIconUpdate = false);
-
- void StartItemMove(QString ID){
- setupDrag(ID, "move");
- }
- void StartItemResize(QString ID){
- setupDrag(ID, "resize");
- }
- void RemoveItem(QString ID){
- //Special case - desktop file/dir link using the "applauncher" plugin
- if(ID.startsWith("applauncher::")){
- QFileInfo info(ID.section("---",0,0).section("::",1,50) );
- if(info.exists() && info.absolutePath()==QDir::homePath()+"/Desktop"){
- qDebug() << "Deleting Desktop Item:" << info.absoluteFilePath();
- if(!info.isSymLink() && info.isDir()){ QProcess::startDetached("rm -r \""+info.absoluteFilePath()+"\""); }
- else{ QFile::remove(info.absoluteFilePath()); } //just remove the file/symlink directly
- emit PluginRemovedByUser(ID);
- return;
- }
- }
- //Any other type of plugin
- for(int i=0; i<ITEMS.length(); i++){
- if(ITEMS[i]->whatsThis()==ID){
- ITEMS[i]->Cleanup();
- ITEMS.takeAt(i)->deleteLater();
- break;
- }
- }
- emit PluginRemovedByUser(ID);
- }
-
-protected:
- void focusInEvent(QFocusEvent *ev){
- this->lower(); //make sure we stay on the bottom of the window stack
- QWidget::focusInEvent(ev); //do normal handling
- }
- void paintEvent(QPaintEvent*ev);
-
- //Need Drag and Drop functionality (internal movement)
- void dragEnterEvent(QDragEnterEvent *ev){
- if(ev->mimeData()->hasFormat(MIMETYPE) ){
- ev->acceptProposedAction(); //allow this to be dropped here
- }else if(ev->mimeData()->hasUrls()){
- ev->acceptProposedAction(); //allow this to be dropped here
- }else{
- ev->ignore();
- }
- }
-
- void dragMoveEvent(QDragMoveEvent *ev){
- if(ev->mimeData()->hasFormat(MIMETYPE) ){
- //Internal move/resize - Check for validity
- QString act = QString( ev->mimeData()->data(MIMETYPE) );
- LDPlugin *item = ItemFromID(act.section("::::",1,50));
- //qDebug() << "Internal Move Event:" << act << ev->pos();
- if(item!=0){
- QRect geom = item->geometry();
- QPoint grid = posToGrid(ev->pos());
- if(act.section("::::",0,0)=="move"){
- QPoint diff = grid - posToGrid(geom.center()); //difference in grid coords
- //qDebug() << "Move Event:" << "Diff:" << diff << "Geom:" << geom << grid << ev->pos();
- geom = geomToGrid(geom); //convert to grid coords
- //qDebug() << "Move Event:" << "Old geom (grid):" << geom;
- geom.moveTo( (geom.topLeft()+diff) );
- //qDebug() << " - After Move:" << geom;
- bool valid = ValidGrid(geom);
- if(valid){
- //Convert to pixel coordinates and check validity again
- geom = gridToGeom(geom); //convert back to px coords with edge matching
- valid = ValidGeometry(act.section("::::",1,50), geom);
- }
- if(valid){
- MovePlugin(item, geom);
- //item->setGeometry(geom);
- //item->setFixedSize(geom.size()); //needed due to resizing limitations and such for some plugins
- ev->acceptProposedAction();
- //item->savePluginGeometry(geom); //save in pixel coords
- }else{ ev->ignore(); } //invalid location
-
- }else{
- //Resize operation
- QPoint diff = ev->pos() - (geom.center()-QPoint(1,1)); //need difference from center (pixels)
- //Note: Use the 1x1 pixel offset to ensure that the center point is not exactly on a grid point intersection (2x2, 4x4, etc)
- //qDebug() << "Resize Plugin:" << geom << grid << posToGrid(geom.center()) << diff;
- geom = geomToGrid(geom); //convert to grid coordinates now
- //qDebug() << " - Grid Geom:" << geom;
- if(diff.x()<0){ geom.setLeft(ev->pos().x()/GRIDSIZE); } //expanding to the left (round down)
- else if(diff.x()>0){ geom.setRight( ev->pos().x()/GRIDSIZE); } //expanding to the right (round down)
- if(diff.y()<0){ geom.setTop( ev->pos().y()/GRIDSIZE); } //expanding above (round down)
- else if(diff.y()>0){ geom.setBottom( ev->pos().y()/GRIDSIZE); } //expanding below (round down)
- //qDebug() << " - Adjusted:" << geom;
- bool valid = ValidGrid(geom);
- if(valid){
- //Convert to pixel coordinates and check validity again
- geom = gridToGeom(geom); //convert back to px coords with edge matching
- valid = ValidGeometry(act.section("::::",1,50), geom);
- }
- if(valid){
- MovePlugin(item, geom);
- //item->setGeometry(geom);
- //item->setFixedSize(geom.size()); //needed due to resizing limitations and such for some plugins
- ev->acceptProposedAction();
- //item->savePluginGeometry(geom); //save in pixel coords
- }else{ ev->ignore(); } //invalid location
- }
- }
- }else if(ev->mimeData()->hasUrls()){
- ev->acceptProposedAction(); //allow this to be dropped here
- }else{
- ev->ignore();
- }
- }
-
- void dropEvent(QDropEvent *ev){
- //QPoint grid = posToGrid(ev->pos());
- if(ev->mimeData()->hasFormat(MIMETYPE)){
- //Desktop Items getting moved around - already performed in the dragMoveEvent
- ev->accept();
- }else if(ev->mimeData()->hasUrls()){
- ev->accept();
- //Files getting dropped here
- QList<QUrl> urls = ev->mimeData()->urls();
- qDebug() << "Desktop Drop Event:" << urls;
- for(int i=0; i<urls.length(); i++){
- //If this file is not in the desktop folder, move/copy it here
- if(urls[i].isLocalFile()){
- QFileInfo info(urls[i].toLocalFile());
- if(info.exists() && !QFile::exists(QDir::homePath()+"/Desktop/"+info.fileName())){
- //Make a link to the file here
- QFile::link(info.absoluteFilePath(), QDir::homePath()+"/Desktop/"+info.fileName());
- }else{
- qWarning() << "Invalid desktop file drop (ignored):" << urls[i].toString();
- }
- }
-
- }
- }else{
- //Ignore this event
- ev->ignore();
- }
- }
-
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/LPanel.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/LPanel.cpp
deleted file mode 100644
index 5df1fcb6..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/LPanel.cpp
+++ /dev/null
@@ -1,399 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2012-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LPanel.h"
-#include "LSession.h"
-#include <QScreen>
-
-#include "panel-plugins/systemtray/LSysTray.h"
-
-#define DEBUG 0
-
-LPanel::LPanel(QSettings *file, QString scr, int num, QWidget *parent) : QWidget(){
- //Take care of inputs
- this->setMouseTracking(true);
- hascompositer = false; //LUtils::isValidBinary("xcompmgr"); //NOT WORKING YET - xcompmgr issue with special window flags?
- if(DEBUG){ qDebug() << " - Creating Panel:" << scr << num; }
- bgWindow = parent; //save for later
- //Setup the widget overlay for the entire panel to provide transparency effects
- panelArea = new QWidget(this);
- //panelArea->setAttribute(Qt::WA_TranslucentBackground);
- QBoxLayout *tmp = new QBoxLayout(QBoxLayout::LeftToRight);
- tmp->setContentsMargins(0,0,0,0);
- this->setLayout(tmp);
- tmp->addWidget(panelArea);
- settings = file;
- screenID = scr;
- panelnum = num; //save for later
- screen = LSession::desktop();
- QString screenID = QApplication::screens().at(Screen())->name();
- PPREFIX = "panel_"+screenID+"."+QString::number(num)+"/";
- defaultpanel = (LSession::handle()->screenGeom(Screen()).x()==0 && num==0);
- horizontal=true; //use this by default initially
- hidden = false; //use this by default
- //Setup the panel
- if(DEBUG){ qDebug() << " -- Setup Panel"; }
- this->setContentsMargins(0,0,0,0);
- this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
- //panels cannot get keyboard focus otherwise it upsets the task manager window detection
- //this->setAttribute(Qt::WA_X11DoNotAcceptFocus);
- this->setAttribute(Qt::WA_X11NetWmWindowTypeDock);
- this->setAttribute(Qt::WA_AlwaysShowToolTips);
- this->setAttribute(Qt::WA_TranslucentBackground);
- //this->setAttribute(Qt::WA_NoSystemBackground);
- this->setAutoFillBackground(false);
- this->setWindowFlags(Qt::FramelessWindowHint | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint);
- //this->setWindowFlags(Qt::X11BypassWindowManagerHint | Qt::WindowStaysOnTopHint);
-
- this->setWindowTitle("LuminaPanel");
- this->setObjectName("LuminaPanelBackgroundWidget");
- this->setStyleSheet("QToolButton::menu-indicator{ image: none; } QWidget#LuminaPanelBackgroundWidget{ background: transparent; }");
- panelArea->setObjectName("LuminaPanelColor");
- layout = new QBoxLayout(QBoxLayout::LeftToRight);
- layout->setContentsMargins(0,0,0,0);
- layout->setSpacing(1);
- //layout->setSizeConstraint(QLayout::SetFixedSize);
- panelArea->setLayout(layout);
- //Set special window flags on the panel for proper usage
- this->show();
- LSession::handle()->XCB->SetAsPanel(this->winId());
- LSession::handle()->XCB->SetAsSticky(this->winId());
- if(hascompositer){
- //qDebug() << "Enable Panel compositing";
- //this->setStyleSheet("QWidget#LuminaPanelBackgroundWidget{ background: transparent; }");
- //this->setWindowOpacity(0.5); //fully transparent background for the main widget
- //panelArea->setWindowOpacity(1.0); //fully opaque for the widget on top (apply stylesheet transparencies)
- }
- QTimer::singleShot(1,this, SLOT(UpdatePanel()) );
- //connect(screen, SIGNAL(resized(int)), this, SLOT(UpdatePanel()) ); //in case the screen resolution changes
-}
-
-LPanel::~LPanel(){
-
-}
-
-int LPanel::Screen(){
- // Find the screen number associated with this ID
- QList<QScreen*> scrns = QApplication::screens();
- for(int i=0; i<scrns.length(); i++){
- if(scrns[i]->name() == screenID){ return i; }
- }
- return -1;
-}
-
-void LPanel::prepareToClose(){
- //Go through and remove all the plugins
- for(int i=0; i<PLUGINS.length(); i++){
- PLUGINS[i]->AboutToClose(); //any last cleanup for this plugin
- layout->takeAt(i); //remove from the layout
- PLUGINS.takeAt(i)->deleteLater(); //delete the actual widget
- LSession::processEvents();
- i--; //need to back up one space to not miss another plugin
- }
- this->hide();
-}
-
-void LPanel::scalePanel(double xscale, double yscale){
- int ht = settings->value(PPREFIX+"height", 30).toInt(); //this is technically the distance into the screen from the edge
- QString loc = settings->value(PPREFIX+"location","").toString().toLower();
- if(loc=="top" || loc=="bottom"){
- ht = qRound(ht*yscale);
- }else{
- ht = qRound(ht*xscale);
- }
- settings->setValue(PPREFIX+"height", ht);
- settings->sync();
- QTimer::singleShot(0, this, SLOT(UpdatePanel()) );
-}
-
-//===========
-// PUBLIC SLOTS
-//===========
-void LPanel::UpdatePanel(bool geomonly){
- //Create/Update the panel as designated in the Settings file
- settings->sync(); //make sure to catch external settings changes
- //First set the geometry of the panel and send the EWMH message to reserve that space
- if(DEBUG){ qDebug() << "Update Panel: Geometry only=" << geomonly << "Screen Size:" << LSession::handle()->screenGeom(Screen()); }
- hidden = settings->value(PPREFIX+"hidepanel",false).toBool();
- QString loc = settings->value(PPREFIX+"location","").toString().toLower();
- if(loc.isEmpty() && defaultpanel){ loc="top"; }
- if(loc=="top" || loc=="bottom"){
- horizontal=true;
- layout->setAlignment(Qt::AlignLeft);
- layout->setDirection(QBoxLayout::LeftToRight);
- }else{
- horizontal=false;
- layout->setAlignment(Qt::AlignTop);
- layout->setDirection(QBoxLayout::TopToBottom);
- }
- int ht = qRound(settings->value(PPREFIX+"height", 30).toDouble()); //this is technically the distance into the screen from the edge
- fullwidth = ht; //save this for later
- if(ht<=1){ ht = 30; } //some kind of error in the saved height - use the default value
- int hidesize = qRound(ht*0.01); //use 1% of the panel size
- if(hidesize<2){ hidesize=2; } //minimum of 2 pixels (need space for the mouse to go over it)
- if(hidden){ viswidth = hidesize; }
- else{ viswidth = ht; }
- if(DEBUG){ qDebug() << "Hidden Panel size:" << hidesize << "pixels"; }
- //qDebug() << " - set Geometry";
- int xwid = LSession::handle()->screenGeom(Screen()).width();
- int xhi = LSession::handle()->screenGeom(Screen()).height();
- int xloc = LSession::handle()->screenGeom(Screen()).x();
- int yloc = LSession::handle()->screenGeom(Screen()).y();
- double panelPercent = settings->value(PPREFIX+"lengthPercent",100).toInt();
- if(panelPercent<1 || panelPercent>100){ panelPercent = 100; }
- panelPercent = panelPercent/100.0;
- QString panelPinLoc = settings->value(PPREFIX+"pinLocation","center").toString().toLower(); //[left/right/center] possible values (assume center otherwise)
- if(DEBUG){ qDebug() << " - Panel settings:" << QString::number(panelPercent)+QString("%") << panelPinLoc << loc; }
- //xloc=xoffset;
- if(loc=="top"){ //top of screen
- QSize sz = QSize(xwid*panelPercent, ht);
- if(panelPinLoc=="left"){} // no change to xloc
- else if(panelPinLoc=="right"){ xloc = xloc+xwid-sz.width(); }
- else{ xloc = xloc+((xwid-sz.width())/2) ; } //centered
- //qDebug() << " - Panel Sizing:" << xloc << sz;
- this->setMinimumSize(sz);
- this->setMaximumSize(sz);
- this->setGeometry(xloc,yloc,sz.width(), sz.height());
- //qDebug() << " - Reserve Panel Localation";
- if(!hidden){ LSession::handle()->XCB->ReserveLocation(this->winId(), this->geometry(), "top"); }
- else{
- LSession::handle()->XCB->ReserveLocation(this->winId(), QRect(xloc, yloc, this->width(), hidesize), "top");
- hidepoint = QPoint(xloc, yloc);
- showpoint = QPoint(xloc, yloc);
- this->move(hidepoint);
- this->resize( this->width(), viswidth);
- }
- }else if(loc=="bottom"){ //bottom of screen
- QSize sz = QSize(xwid*panelPercent, ht);
- if(panelPinLoc=="left"){} // no change to xloc
- else if(panelPinLoc=="right"){ xloc = xloc+xwid-sz.width(); }
- else{ xloc = xloc+((xwid-sz.width())/2) ; } //centered
- this->setMinimumSize(sz);
- this->setMaximumSize(sz);
- this->setGeometry(xloc,yloc+xhi-ht,sz.width(), ht );
- if(!hidden){ LSession::handle()->XCB->ReserveLocation(this->winId(), this->geometry(), "bottom"); }
- else{
- LSession::handle()->XCB->ReserveLocation(this->winId(), QRect(xloc,yloc+ xhi-hidesize, this->width(), hidesize), "bottom");
- hidepoint = QPoint(xloc, yloc+xhi-hidesize);
- showpoint = QPoint(xloc, yloc+xhi-ht);
- this->move(hidepoint); //Could bleed over onto the screen below
- this->resize( this->width(), viswidth);
- }
- }else if(loc=="left"){ //left side of screen
- QSize sz = QSize(ht, xhi*panelPercent);
- if(panelPinLoc=="left"){} //this is actually the top (left of center in length dimension)
- else if(panelPinLoc=="right"){ yloc = yloc+xhi-sz.height(); }
- else{ yloc = yloc+((xhi-sz.height())/2) ; } //centered
- this->setMinimumSize(sz);
- this->setMaximumSize(sz);
- this->setGeometry(xloc,yloc, ht, sz.height());
- if(!hidden){ LSession::handle()->XCB->ReserveLocation(this->winId(), this->geometry(), "left"); }
- else{
- LSession::handle()->XCB->ReserveLocation(this->winId(), QRect(xloc, yloc, hidesize, sz.height()), "left");
- hidepoint = QPoint(xloc, yloc);
- showpoint = QPoint(xloc, yloc);
- this->move(hidepoint); //Could bleed over onto the screen left
- this->resize( viswidth, this->height());
- }
- }else{ //right side of screen
- QSize sz = QSize(ht, xhi*panelPercent);
- if(panelPinLoc=="left"){} //this is actually the top (left of center in length dimension)
- else if(panelPinLoc=="right"){ yloc = yloc+xhi-sz.height(); }
- else{ yloc = yloc+((xhi-sz.height())/2) ; } //centered
- this->setMinimumSize(sz);
- this->setMaximumSize(sz);
- this->setGeometry(xloc+xwid-ht,yloc,ht, sz.height());
- if(!hidden){ LSession::handle()->XCB->ReserveLocation(this->winId(), this->geometry(), "right"); }
- else{
- LSession::handle()->XCB->ReserveLocation(this->winId(), QRect(xloc+xwid-hidesize, yloc, hidesize, sz.height()), "right");
- hidepoint = QPoint(xloc+xwid-hidesize, yloc);
- showpoint = QPoint(xloc+xwid-ht, yloc);
- this->move(hidepoint); //Could bleed over onto the screen right
- this->resize( viswidth, this->height());
- }
- }
- if(DEBUG){ qDebug() << " - Done with panel geometry"; }
- //Double check that the "sticky" bit is set on the window state
- bool needsticky = !LSession::handle()->XCB->WM_Get_Window_States(this->winId()).contains(LXCB::S_STICKY);
- if(needsticky){ LSession::handle()->XCB->SetAsSticky(this->winId()); }
- if(geomonly){ return; }
- //Now update the appearance of the toolbar
- if(settings->value(PPREFIX+"customColor", false).toBool()){
- QString color = settings->value(PPREFIX+"color", "rgba(255,255,255,160)").toString();
- QString style = "QWidget#LuminaPanelColor{ background: %1; border-radius: 3px; border: 1px solid %1; }";
- style = style.arg(color);
- panelArea->setStyleSheet(style);
- }else{
- panelArea->setStyleSheet(""); //clear it and use the one from the theme
- }
-
- //Then go through the plugins and create them as necessary
- QStringList plugins = settings->value(PPREFIX+"pluginlist", QStringList()).toStringList();
- /*if(defaultpanel && plugins.isEmpty()){
- plugins << "userbutton" << "taskmanager" << "spacer" << "systemtray" << "clock" << "systemdashboard";
- }*/
- if(DEBUG){ qDebug() << " - Initialize Plugins: " << plugins; }
- for(int i=0; i<plugins.length(); i++){
- //Ensure this plugin has a unique ID (NOTE: this numbering does not persist between sessions)
- if(!plugins[i].contains("---")){
- int num=1;
- while( plugins.contains(plugins[i]+"---"+QString::number(Screen())+"."+QString::number(this->number())+"."+QString::number(num)) ){
- num++;
- }
-
- plugins[i] = plugins[i]+"---"+QString::number(Screen())+"."+QString::number(this->number())+"."+QString::number(num);
- //qDebug() << "Adjust Plugin ID:" << plugins[i];
- }
- //See if this plugin is already there or in a different spot
- bool found = false;
- for(int p=0; p<PLUGINS.length(); p++){
- if(PLUGINS[p]->type()==plugins[i]){
- found = true; //already exists
- //Make sure the plugin layout has the correct orientation
- if(horizontal){PLUGINS[p]->layout()->setDirection(QBoxLayout::LeftToRight); }
- else{ PLUGINS[p]->layout()->setDirection(QBoxLayout::TopToBottom); }
- PLUGINS[p]->OrientationChange();
- //Now check the location of the plugin in the panel
- if(p!=i){ //wrong place in the panel
- layout->takeAt(p); //remove the item from the current location
- layout->insertWidget(i, PLUGINS[p]); //add the item into the correct location
- PLUGINS.move(p,i); //move the identifier in the list to match
- }
- break;
- }
- }
- if(!found){
- //New Plugin
- if(DEBUG){ qDebug() << " -- New Plugin:" << plugins[i] << i; }
- LPPlugin *plug = NewPP::createPlugin(plugins[i], panelArea, horizontal);
- if(plug != 0){
- PLUGINS.insert(i, plug);
- layout->insertWidget(i, PLUGINS[i]);
- connect(plug, SIGNAL(MenuClosed()), this, SLOT(checkPanelFocus()));
- }else{
- //invalid plugin type
- plugins.removeAt(i); //remove this invalid plugin from the list
- i--; //make sure we don't miss the next item with the re-order
- }
- }
- //LSession::processEvents();
- }
- //Now remove any extra plugins from the end
- //qDebug() << "plugins:" << plugins;
- //qDebug() << "PLUGINS length:" << PLUGINS.length();
- for(int i=0; i<PLUGINS.length(); i++){
- if(plugins.contains(PLUGINS[i]->type())){ continue; } //good plugin - skip it
- if(DEBUG){ qDebug() << " -- Remove Plugin: " << PLUGINS[i]->type(); }
- //If this is the system tray - stop it first
- if( PLUGINS[i]->type().startsWith("systemtray---") ){
- static_cast<LSysTray*>(PLUGINS[i])->stop();
- }
- layout->takeAt(i); //remove from the layout
- PLUGINS.takeAt(i)->deleteLater(); //delete the actual widget
- //LSession::processEvents();
- i--; //need to back up one space to not miss another plugin
- }
- this->update();
- this->show(); //make sure the panel is visible now
- if(hidden){ this->move(hidepoint); }
- //Now go through and send the orientation update signal to each plugin
- for(int i=0; i<PLUGINS.length(); i++){
- QTimer::singleShot(0,PLUGINS[i], SLOT(OrientationChange()));
- }
- checkPanelFocus();
- //LSession::processEvents();
-}
-
-void LPanel::UpdateLocale(){
- //The panel itself has no text to translate, just forward the signal to all the plugins
- for(int i=0; i<PLUGINS.length(); i++){
- QTimer::singleShot(1,PLUGINS[i], SLOT(LocaleChange()));
- }
-}
-
-void LPanel::UpdateTheme(){
- //The panel itself has no theme-based icons, just forward the signal to all the plugins
- for(int i=0; i<PLUGINS.length(); i++){
- QTimer::singleShot(1,PLUGINS[i], SLOT(ThemeChange()));
- }
-}
-
-// ===================
-// PRIVATE SLOTS
-// ===================
-void LPanel::checkPanelFocus(){
- qDebug() << "Check Panel Focus:" << panelnum << viswidth << fullwidth << this->size();
- if( !this->geometry().contains(QCursor::pos()) ){
- //Move the panel back to it's "hiding" spot
- if(hidden){
- QSize sz(horizontal ? this->width() : viswidth, horizontal ? viswidth : this->height() );
- this->setMinimumSize(sz);
- this->setMaximumSize(sz);
- this->setGeometry( QRect(hidepoint, sz) );
- }
- //Re-active the old window
- if(LSession::handle()->activeWindow()!=0){
- LSession::handle()->XCB->ActivateWindow(LSession::handle()->activeWindow());
- }
- }else if(hidden){
- QSize sz(horizontal ? this->width() : fullwidth, horizontal ? fullwidth : this->height() );
- this->setMinimumSize(sz);
- this->setMaximumSize(sz);
- this->setGeometry( QRect(showpoint, sz) );
- }
-}
-
-//===========
-// PROTECTED
-//===========
-void LPanel::resizeEvent(QResizeEvent *event){
- QWidget::resizeEvent(event);
- for(int i=0; i<PLUGINS.length(); i++){ PLUGINS[i]->OrientationChange(); }
-}
-
-void LPanel::paintEvent(QPaintEvent *event){
- if(!hascompositer){
- QPainter *painter = new QPainter(this);
- //qDebug() << "Paint Panel:" << PPREFIX;
- //Make sure the base background of the event rectangle is the associated rectangle from the BGWindow
- QRect rec = event->rect();//this->geometry(); //start with the global geometry of the panel
- rec.adjust(-1,-1,2,2); //add 1 more pixel on each side
- //Need to translate that rectangle to the background image coordinates
- //qDebug() << " - Rec:" << rec << hidden << this->geometry() << bgWindow->geometry();
- rec.moveTo( bgWindow->mapFromGlobal( this->mapToGlobal(rec.topLeft()) ) ); //(rec.x()-LSession::handle()->screenGeom(Screen()).x(), rec.y()-LSession::handle()->screenGeom(Screen()).y() );
- //qDebug() << " - Adjusted Window Rec:" << rec;
- painter->drawPixmap(event->rect().adjusted(-1,-1,2,2), bgWindow->grab(rec));
- //painter->drawPixmap(event->rect().adjusted(-1,-1,2,2), QApplication::screens().at(Screen())->grabWindow(QX11Info::appRootWindow(), rec.x(), rec.y(), rec.width(), rec.height()) );
- delete(painter);
- }
- QWidget::paintEvent(event); //now pass the event along to the normal painting event
-}
-
-void LPanel::enterEvent(QEvent *event){
- //qDebug() << "Panel Enter Event:";
- checkPanelFocus();
- /*if(hidden){
- //Move the panel out so it is fully available
- this->move(showpoint);
- this->resize( horizontal ? this->width() : fullwidth, horizontal ? fullwidth : this->height() );
- this->update();
- }*/
- //this->activateWindow();
- event->accept(); //just to quiet the compile warning
-}
-
-void LPanel::leaveEvent(QEvent *event){
- /*qDebug() << "Panel Leave Event:";
- qDebug() << "Panel Geom:" << this->geometry().x() << this->geometry().y() << this->geometry().width() << this->geometry().height() ;
- QPoint pt = QCursor::pos();
- qDebug() << "Mouse Point (global):" << pt.x() << pt.y();
- //pt = this->mapFromGlobal(pt);
- //qDebug() << "Mouse Point (local):" << pt.x() << pt.y();
- qDebug() << "Contained:" << this->geometry().contains(pt);*/
- checkPanelFocus();
- QWidget::leaveEvent(event);
- //event->accept(); //just to quiet the compile warning
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/LPanel.h b/src-qt5/core/lumina-desktop-unified/src-DE/LPanel.h
deleted file mode 100644
index bcea8eaf..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/LPanel.h
+++ /dev/null
@@ -1,81 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2012-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This is the generic class for creating a full-width panel that stays
-// on top of all other windows (top or bottom of the screen only)
-//===========================================
-#ifndef _LUMINA_DESKTOP_PANEL_H
-#define _LUMINA_DESKTOP_PANEL_H
-
-#include <QWidget>
-#include <QBoxLayout>
-#include <QSettings>
-#include <QString>
-#include <QStringList>
-#include <QTimer>
-#include <QMoveEvent>
-#include <QDesktopWidget>
-#include <QPainter>
-#include <QPaintEvent>
-
-#include "panel-plugins/NewPP.h"
-#include "panel-plugins/LPPlugin.h"
-
-#include <LuminaX11.h>
-#include <LuminaOS.h>
-
-class LPanel : public QWidget{
- Q_OBJECT
-private:
- QBoxLayout *layout;
- QSettings *settings;
- QString PPREFIX; //internal prefix for all settings
- QDesktopWidget *screen;
- QWidget *bgWindow, *panelArea;
- //QRect hidegeom, showgeom; //for hidden panels
- QPoint hidepoint, showpoint; //for hidden panels: locations when hidden/visible
- bool defaultpanel, horizontal, hidden, hascompositer;
- QString screenID;
- int panelnum;
- int viswidth, fullwidth;
- QList<LPPlugin*> PLUGINS;
-
- int Screen(); //Turn the screenID into the appropriate number
-
-public:
- LPanel(QSettings *file, QString scr = 0, int num =0, QWidget *parent=0); //settings file, screen number, panel number
- ~LPanel();
-
- int number(){
- return panelnum;
- }
-
- QString prefix(){
- return PPREFIX;
- }
-
- int visibleWidth(){
- return viswidth;
- }
- void prepareToClose();
- void scalePanel(double xscale, double yscale);
-
-public slots:
- void UpdatePanel(bool geomonly = false); //Load the settings file and update the panel appropriately
- void UpdateLocale(); //Locale Changed externally
- void UpdateTheme(); //Theme Changed externally
-
-private slots:
- void checkPanelFocus();
-
-protected:
- void resizeEvent(QResizeEvent *event);
- void paintEvent(QPaintEvent *event);
- void enterEvent(QEvent *event);
- void leaveEvent(QEvent *event);
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/LSession.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/LSession.cpp
deleted file mode 100644
index 0387555a..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/LSession.cpp
+++ /dev/null
@@ -1,798 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2012-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LSession.h"
-#include <LuminaOS.h>
-
-#include <QTime>
-#include <QScreen>
-#include <QtConcurrent>
-#include "LXcbEventFilter.h"
-#include "BootSplash.h"
-
-//LibLumina X11 class
-#include <LuminaX11.h>
-#include <LUtils.h>
-
-#include <unistd.h> //for usleep() usage
-
-#ifndef DEBUG
-#define DEBUG 0
-#endif
-
-XCBEventFilter *evFilter = 0;
-
-LSession::LSession(int &argc, char ** argv) : LSingleApplication(argc, argv, "lumina-desktop"){
- if(this->isPrimaryProcess()){
- connect(this, SIGNAL(InputsAvailable(QStringList)), this, SLOT(NewCommunication(QStringList)) );
- this->setApplicationName("Lumina Desktop Environment");
- this->setApplicationVersion( LDesktopUtils::LuminaDesktopVersion() );
- this->setOrganizationName("LuminaDesktopEnvironment");
- this->setQuitOnLastWindowClosed(false); //since the LDesktop's are not necessarily "window"s
- //Enabled a few of the simple effects by default
- this->setEffectEnabled( Qt::UI_AnimateMenu, true);
- this->setEffectEnabled( Qt::UI_AnimateCombo, true);
- this->setEffectEnabled( Qt::UI_AnimateTooltip, true);
- //this->setAttribute(Qt::AA_UseDesktopOpenGL);
- //this->setAttribute(Qt::AA_UseHighDpiPixmaps); //allow pixmaps to be scaled up as well as down
- //this->setStyle( new MenuProxyStyle); //QMenu icon size override
- SystemTrayID = 0; VisualTrayID = 0;
- sysWindow = 0;
- TrayDmgEvent = 0;
- TrayDmgError = 0;
- lastActiveWin = 0;
- cleansession = true;
- TrayStopping = false;
- screenTimer = new QTimer(this);
- screenTimer->setSingleShot(true);
- screenTimer->setInterval(50);
- connect(screenTimer, SIGNAL(timeout()), this, SLOT(updateDesktops()) );
- for(int i=1; i<argc; i++){
- if( QString::fromLocal8Bit(argv[i]) == "--noclean" ){ cleansession = false; break; }
- }
- XCB = new LXCB(); //need access to XCB data/functions right away
- //initialize the empty internal pointers to 0
- appmenu = 0;
- settingsmenu = 0;
- currTranslator=0;
- mediaObj=0;
- sessionsettings=0;
- //Setup the event filter for Qt5
- evFilter = new XCBEventFilter(this);
- this->installNativeEventFilter( evFilter );
- connect(this, SIGNAL(screenAdded(QScreen*)), this, SLOT(screensChanged()) );
- connect(this, SIGNAL(screenRemoved(QScreen*)), this, SLOT(screensChanged()) );
- connect(this, SIGNAL(primaryScreenChanged(QScreen*)), this, SLOT(screensChanged()) );
- } //end check for primary process
-}
-
-LSession::~LSession(){
- if(this->isPrimaryProcess()){
- //WM->stopWM();
- for(int i=0; i<DESKTOPS.length(); i++){
- DESKTOPS[i]->deleteLater();
- }
- //delete WM;
- settingsmenu->deleteLater();
- appmenu->deleteLater();
- delete currTranslator;
- if(mediaObj!=0){delete mediaObj;}
- }
-}
-
-void LSession::setupSession(){
- //Seed random number generator (if needed)
- qsrand( QTime::currentTime().msec() );
-
- BootSplash splash;
- splash.showScreen("init");
- qDebug() << "Initializing Session";
- if(QFile::exists("/tmp/.luminastopping")){ QFile::remove("/tmp/.luminastopping"); }
- QTime* timer = 0;
- //if(DEBUG){ timer = new QTime(); timer->start(); qDebug() << " - Init srand:" << timer->elapsed();}
-
- //Setup the QSettings default paths
- splash.showScreen("settings");
- if(DEBUG){ qDebug() << " - Init QSettings:" << timer->elapsed();}
- sessionsettings = new QSettings("lumina-desktop", "sessionsettings");
- DPlugSettings = new QSettings("lumina-desktop","pluginsettings/desktopsettings");
- //Load the proper translation files
- if(sessionsettings->value("ForceInitialLocale",false).toBool()){
- //Some system locale override it in place - change the env first
- LUtils::setLocaleEnv( sessionsettings->value("InitLocale/LANG","").toString(), \
- sessionsettings->value("InitLocale/LC_MESSAGES","").toString(), \
- sessionsettings->value("InitLocale/LC_TIME","").toString(), \
- sessionsettings->value("InitLocale/LC_NUMERIC","").toString(), \
- sessionsettings->value("InitLocale/LC_MONETARY","").toString(), \
- sessionsettings->value("InitLocale/LC_COLLATE","").toString(), \
- sessionsettings->value("InitLocale/LC_CTYPE","").toString() );
- }
- currTranslator = LUtils::LoadTranslation(this, "lumina-desktop");
-//use the system settings
- //Setup the user's lumina settings directory as necessary
- splash.showScreen("user");
- if(DEBUG){ qDebug() << " - Init User Files:" << timer->elapsed();}
- checkUserFiles(); //adds these files to the watcher as well
-
- //Initialize the internal variables
- DESKTOPS.clear();
-
- //Start the background system tray
- splash.showScreen("systray");
- if(DEBUG){ qDebug() << " - Init System Tray:" << timer->elapsed();}
- startSystemTray();
-
- //Initialize the global menus
- qDebug() << " - Initialize system menus";
- splash.showScreen("apps");
- if(DEBUG){ qDebug() << " - Init AppMenu:" << timer->elapsed();}
- appmenu = new AppMenu();
-
- splash.showScreen("menus");
- if(DEBUG){ qDebug() << " - Init SettingsMenu:" << timer->elapsed();}
- settingsmenu = new SettingsMenu();
- if(DEBUG){ qDebug() << " - Init SystemWindow:" << timer->elapsed();}
- sysWindow = new SystemWindow();
-
- //Initialize the desktops
- splash.showScreen("desktop");
- if(DEBUG){ qDebug() << " - Init Desktops:" << timer->elapsed();}
- desktopFiles = QDir(QDir::homePath()+"/Desktop").entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs, QDir::Name | QDir::IgnoreCase | QDir::DirsFirst);
- updateDesktops();
- for(int i=0; i<6; i++){ LSession::processEvents(); } //Run through this a few times so the interface systems get up and running
-
- //Now setup the system watcher for changes
- splash.showScreen("final");
- qDebug() << " - Initialize file system watcher";
- if(DEBUG){ qDebug() << " - Init QFileSystemWatcher:" << timer->elapsed();}
- watcher = new QFileSystemWatcher(this);
- QString confdir = sessionsettings->fileName().section("/",0,-2);
- watcherChange(sessionsettings->fileName() );
- watcherChange( confdir+"/desktopsettings.conf" );
- watcherChange( confdir+"/fluxbox-init" );
- watcherChange( confdir+"/fluxbox-keys" );
- watcherChange( confdir+"/favorites.list" );
- //Try to watch the localized desktop folder too
- if(QFile::exists(QDir::homePath()+"/"+tr("Desktop"))){ watcherChange( QDir::homePath()+"/"+tr("Desktop") ); }
- watcherChange( QDir::homePath()+"/Desktop" );
-
- //connect internal signals/slots
- connect(watcher, SIGNAL(directoryChanged(QString)), this, SLOT(watcherChange(QString)) );
- connect(watcher, SIGNAL(fileChanged(QString)), this, SLOT(watcherChange(QString)) );
- connect(this, SIGNAL(aboutToQuit()), this, SLOT(SessionEnding()) );
- if(DEBUG){ qDebug() << " - Init Finished:" << timer->elapsed(); delete timer;}
- for(int i=0; i<4; i++){ LSession::processEvents(); } //Again, just a few event loops here so thing can settle before we close the splash screen
- //launchStartupApps();
- QTimer::singleShot(500, this, SLOT(launchStartupApps()) );
- splash.hide();
- LSession::processEvents();
- splash.close();
- LSession::processEvents();
-}
-
-void LSession::CleanupSession(){
- //Close any running applications and tray utilities (Make sure to keep the UI interactive)
- LSession::processEvents();
- QDateTime time = QDateTime::currentDateTime();
- qDebug() << "Start closing down the session: " << time.toString( Qt::SystemLocaleShortDate);
- //Create a temporary flag to prevent crash dialogs from opening during cleanup
- LUtils::writeFile("/tmp/.luminastopping",QStringList() << "yes", true);
- //Start the logout chimes (if necessary)
- LOS::setAudioVolume( LOS::audioVolume() ); //make sure the audio volume is saved in the backend for the next login
- bool playaudio = sessionsettings->value("PlayLogoutAudio",true).toBool();
- if( playaudio ){ playAudioFile(LOS::LuminaShare()+"Logout.ogg"); }
- //Stop the background system tray (detaching/closing apps as necessary)
- stopSystemTray(!cleansession);
- //Now perform any other cleanup
- if(cleansession){
- //Close any open windows
- //qDebug() << " - Closing any open windows";
- QList<WId> WL = XCB->WindowList(true);
- for(int i=0; i<WL.length(); i++){
- qDebug() << " - Closing window:" << XCB->WindowClass(WL[i]) << WL[i];
- XCB->CloseWindow(WL[i]);
- LSession::processEvents();
- }
- //Now wait a moment for things to close down before quitting
- for(int i=0; i<20; i++){ LSession::processEvents(); usleep(25); } //1/2 second pause
- //Kill any remaining windows
- WL = XCB->WindowList(true); //all workspaces
- for(int i=0; i<WL.length(); i++){
- qDebug() << " - Window did not close, killing application:" << XCB->WindowClass(WL[i]) << WL[i];
- XCB->KillClient(WL[i]);
- LSession::processEvents();
- }
- }
- evFilter->StopEventHandling();
- //Stop the window manager
- //qDebug() << " - Stopping the window manager";
- //WM->stopWM();
- //Now close down the desktop
- qDebug() << " - Closing down the desktop elements";
- for(int i=0; i<DESKTOPS.length(); i++){
- DESKTOPS[i]->prepareToClose();
- //don't actually close them yet - that will happen when the session exits
- // this will leave the wallpapers up for a few moments (preventing black screens)
- }
- //Now wait a moment for things to close down before quitting
- if(playaudio){
- //wait a max of 5 seconds for audio to finish
- bool waitmore = true;
- for(int i=0; i<100 && waitmore; i++){
- usleep(50000); //50ms = 50000 us
- waitmore = (mediaObj->state()==QMediaPlayer::PlayingState);
- LSession::processEvents();
- }
- if(waitmore){ mediaObj->stop(); } //timed out
- }else{
- for(int i=0; i<20; i++){ LSession::processEvents(); usleep(25000); } //1/2 second pause
- }
- //Clean up the temporary flag
- if(QFile::exists("/tmp/.luminastopping")){ QFile::remove("/tmp/.luminastopping"); }
-}
-
-int LSession::VersionStringToNumber(QString version){
- version = version.section("-",0,0); //trim any extra labels off the end
- int maj, mid, min; //major/middle/minor version numbers (<Major>.<Middle>.<Minor>)
- maj = mid = min = 0;
- bool ok = true;
- maj = version.section(".",0,0).toInt(&ok);
- if(ok){ mid = version.section(".",1,1).toInt(&ok); }else{ maj = 0; }
- if(ok){ min = version.section(".",2,2).toInt(&ok); }else{ mid = 0; }
- if(!ok){ min = 0; }
- //Now assemble the number
- //NOTE: This format allows numbers to be anywhere from 0->999 without conflict
- return (maj*1000000 + mid*1000 + min);
-}
-
-void LSession::NewCommunication(QStringList list){
- if(DEBUG){ qDebug() << "New Communications:" << list; }
- for(int i=0; i<list.length(); i++){
- if(list[i]=="--check-geoms"){
- screensChanged();
- }else if(list[i]=="--show-start"){
- emit StartButtonActivated();
- }
- }
-}
-
-void LSession::launchStartupApps(){
- //First start any system-defined startups, then do user defined
- qDebug() << "Launching startup applications";
-
- //Enable Numlock
- if(LUtils::isValidBinary("numlockx")){ //make sure numlockx is installed
- if(sessionsettings->value("EnableNumlock",false).toBool()){
- QProcess::startDetached("numlockx on");
- }else{
- QProcess::startDetached("numlockx off");
- }
- }
- int tmp = LOS::ScreenBrightness();
- if(tmp>0){
- LOS::setScreenBrightness( tmp );
- qDebug() << " - - Screen Brightness:" << QString::number(tmp)+"%";
- }
- QProcess::startDetached("nice lumina-open -autostart-apps");
-
- //Re-load the screen brightness and volume settings from the previous session
- // Wait until after the XDG-autostart functions, since the audio system might be started that way
- qDebug() << " - Loading previous settings";
- tmp = LOS::audioVolume();
- LOS::setAudioVolume(tmp);
- qDebug() << " - - Audio Volume:" << QString::number(tmp)+"%";
-
- //Now play the login music since we are finished
- if(sessionsettings->value("PlayStartupAudio",true).toBool()){
- //Make sure to re-set the system volume to the last-used value at outset
- int vol = LOS::audioVolume();
- if(vol>=0){ LOS::setAudioVolume(vol); }
- LSession::playAudioFile(LOS::LuminaShare()+"Login.ogg");
- }
- qDebug() << " - Finished with startup routines";
-}
-
-void LSession::StartLogout(){
- CleanupSession();
- QCoreApplication::exit(0);
-}
-
-void LSession::StartShutdown(bool skipupdates){
- CleanupSession();
- LOS::systemShutdown(skipupdates);
- QCoreApplication::exit(0);
-}
-
-void LSession::StartReboot(bool skipupdates){
- CleanupSession();
- LOS::systemRestart(skipupdates);
- QCoreApplication::exit(0);
-}
-
-void LSession::reloadIconTheme(){
- //Wait a moment for things to settle before sending out the signal to the interfaces
- QApplication::processEvents();
- QApplication::processEvents();
- emit IconThemeChanged();
-}
-
-void LSession::watcherChange(QString changed){
- if(DEBUG){ qDebug() << "Session Watcher Change:" << changed; }
- //if(changed.endsWith("fluxbox-init") || changed.endsWith("fluxbox-keys")){ refreshWindowManager(); }
- if(changed.endsWith("sessionsettings.conf") ){
- sessionsettings->sync();
- //qDebug() << "Session Settings Changed";
- if(sessionsettings->contains("Qt5_theme_engine")){
- QString engine = sessionsettings->value("Qt5_theme_engine","").toString();
- //qDebug() << "Set Qt5 theme engine: " << engine;
- if(engine.isEmpty()){ unsetenv("QT_QPA_PLATFORMTHEME"); }
- else{ setenv("QT_QPA_PLATFORMTHEME", engine.toUtf8().data(),1); }
- }
- emit SessionConfigChanged();
- }else if(changed.endsWith("desktopsettings.conf") ){ emit DesktopConfigChanged(); }
- else if(changed == QDir::homePath()+"/Desktop" || changed == QDir::homePath()+"/"+tr("Desktop") ){
- desktopFiles = QDir(changed).entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs ,QDir::Name | QDir::IgnoreCase | QDir::DirsFirst);
- if(DEBUG){ qDebug() << "New Desktop Files:" << desktopFiles.length(); }
- emit DesktopFilesChanged();
- }else if(changed.endsWith("favorites.list")){ emit FavoritesChanged(); }
- //Now ensure this file was not removed from the watcher
- if(!watcher->files().contains(changed) && !watcher->directories().contains(changed)){
- if(!QFile::exists(changed)){
- //Create the file really quick to ensure it can be watched
- //TODO
- }
- watcher->addPath(changed);
- }
-}
-
-void LSession::screensChanged(){
- qDebug() << "Screen Number Changed";
- if(screenTimer->isActive()){ screenTimer->stop(); }
- screenTimer->start();
-}
-
-void LSession::screenResized(int scrn){
- qDebug() << "Screen Resized:" << scrn;
- if(screenTimer->isActive()){ screenTimer->stop(); }
- screenTimer->start();
-}
-
-void LSession::checkWindowGeoms(){
- //Only do one window per run (this will be called once per new window - with time delays between)
- if(checkWin.isEmpty()){ return; }
- WId win = checkWin.takeFirst();
- if(RunningApps.contains(win) ){ //just to make sure it did not close during the delay
- adjustWindowGeom( win );
- }
-}
-
-void LSession::checkUserFiles(){
- //internal version conversion examples:
- // [1.0.0 -> 1000000], [1.2.3 -> 1002003], [0.6.1 -> 6001]
- QString OVS = sessionsettings->value("DesktopVersion","0").toString(); //Old Version String
- bool changed = LDesktopUtils::checkUserFiles(OVS);
- if(changed){
- //Save the current version of the session to the settings file (for next time)
- sessionsettings->setValue("DesktopVersion", this->applicationVersion());
- }
-}
-
-void LSession::refreshWindowManager(){
- LUtils::runCmd("touch \""+QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/fluxbox-init\"" );
-}
-
-void LSession::updateDesktops(){
- qDebug() << " - Update Desktops";
- QDesktopWidget *DW = this->desktop();
- int sC = DW->screenCount();
- qDebug() << " Screen Count:" << sC;
- qDebug() << " DESKTOPS Length:" << DESKTOPS.length();
- if(sC<1){ return; } //stop here - no screens available temporarily (displayport/4K issue)
-
- for(int i=0; i<sC; i++){ qDebug() << " -- Screen["+QString::number(i)+"]:" << DW->screenGeometry(i); }
-
- bool firstrun = (DESKTOPS.length()==0);
- bool numchange = DESKTOPS.length()!=sC;
-
- // If the screen count is changing on us
- if ( sC != DW->screenCount() ) {
- qDebug() << "Screen Count changed while running";
- return;
- }
-
- //First clean up any current desktops
- QList<int> dnums; //keep track of which screens are already managed
- QList<QRect> geoms;
- for(int i=0; i<DESKTOPS.length(); i++){
- if ( DESKTOPS[i]->Screen() < 0 || DESKTOPS[i]->Screen() >= sC || geoms.contains(DW->screenGeometry(DESKTOPS[i]->Screen())) ) {
- //qDebug() << " - Close desktop:" << i;
- qDebug() << " - Close desktop on screen:" << DESKTOPS[i]->Screen();
- DESKTOPS[i]->prepareToClose();
- DESKTOPS.takeAt(i)->deleteLater();
- i--;
- } else {
- //qDebug() << " - Show desktop:" << i;
- qDebug() << " - Show desktop on screen:" << DESKTOPS[i]->Screen();
- DESKTOPS[i]->UpdateGeometry();
- DESKTOPS[i]->show();
- dnums << DESKTOPS[i]->Screen();
- geoms << DW->screenGeometry(DESKTOPS[i]->Screen());
- }
- }
-
- //Now add any new desktops
- for(int i=0; i<sC; i++){
- if(!dnums.contains(i) && !geoms.contains(DW->screenGeometry(i)) ){
- //Start the desktop on this screen
- qDebug() << " - Start desktop on screen:" << i;
- DESKTOPS << new LDesktop(i);
- geoms << DW->screenGeometry(i);
- }
- }
-
- //Make sure fluxbox also gets prompted to re-load screen config if the number of screens changes in the middle of a session
- if(numchange && !firstrun) {
- qDebug() << "Update WM";
- refreshWindowManager();
- }
-
- //Make sure all the background windows are registered on the system as virtual roots
- QTimer::singleShot(100,this, SLOT(registerDesktopWindows()));
-}
-
-void LSession::registerDesktopWindows(){
- QList<WId> wins;
- for(int i=0; i<DESKTOPS.length(); i++){
- wins << DESKTOPS[i]->backgroundID();
- }
- XCB->RegisterVirtualRoots(wins);
-}
-
-void LSession::adjustWindowGeom(WId win, bool maximize){
- //return; //temporary disable
- if(DEBUG){ qDebug() << "AdjustWindowGeometry():" << win << maximize << XCB->WindowClass(win); }
- if(XCB->WindowIsFullscreen(win) >=0 ){ return; } //don't touch it
- //Quick hack for making sure that new windows are not located underneath any panels
- // Get the window location
- QRect geom = XCB->WindowGeometry(win, false);
- //Get the frame size
- QList<int> frame = XCB->WindowFrameGeometry(win); //[top,bottom,left,right] sizes of the frame
- //Calculate the full geometry (window + frame)
- QRect fgeom = QRect(geom.x()-frame[2], geom.y()-frame[0], geom.width()+frame[2]+frame[3], geom.height()+frame[0]+frame[1]);
- if(DEBUG){
- qDebug() << "Check Window Geometry:" << XCB->WindowClass(win) << !geom.isNull() << geom << fgeom;
- }
- if(geom.isNull()){ return; } //Could not get geometry for some reason
- //Get the available geometry for the screen the window is on
- QRect desk;
- for(int i=0; i<DESKTOPS.length(); i++){
- if( this->desktop()->screenGeometry(DESKTOPS[i]->Screen()).contains(geom.center()) ){
- //Window is on this screen
- if(DEBUG){ qDebug() << " - On Screen:" << DESKTOPS[i]->Screen(); }
- desk = DESKTOPS[i]->availableScreenGeom();
- if(DEBUG){ qDebug() << " - Screen Geom:" << desk; }
- break;
- }
- }
- if(desk.isNull()){ return; } //Unable to determine screen
- //Adjust the window location if necessary
- if(maximize){
- if(DEBUG){ qDebug() << " - Maximizing New Window:" << desk.width() << desk.height(); }
- geom = desk; //Use the full screen
- XCB->MoveResizeWindow(win, geom);
- XCB->MaximizeWindow(win, true); //directly set the appropriate "maximized" flags (bypassing WM)
-
- }else if(!desk.contains(fgeom) ){
- //Adjust origin point for left/top margins
- if(fgeom.y() < desk.y()){ geom.moveTop(desk.y()+frame[0]); fgeom.moveTop(desk.y()); } //move down to the edge (top panel)
- if(fgeom.x() < desk.x()){ geom.moveLeft(desk.x()+frame[2]); fgeom.moveLeft(desk.x()); } //move right to the edge (left panel)
- //Adjust size for bottom margins (within reason, since window titles are on top normally)
- // if(geom.right() > desk.right() && (geom.width() > 100)){ geom.setRight(desk.right()); }
- if(fgeom.bottom() > desk.bottom() && geom.height() > 10){
- if(DEBUG){ qDebug() << "Adjust Y:" << fgeom << geom << desk; }
- int diff = fgeom.bottom()-desk.bottom(); //amount of overlap
- if(DEBUG){ qDebug() << "Y-Diff:" << diff; }
- if(diff < 0){ diff = -diff; } //need a positive value
- if( (fgeom.height()+ diff)< desk.height()){
- //just move the window - there is room for it above
- geom.setBottom(desk.bottom()-frame[1]);
- fgeom.setBottom(desk.bottom());
- }else if(geom.height() > diff){ //window bigger than the difference
- //Need to resize the window - keeping the origin point the same
- geom.setHeight( geom.height()-diff-1 ); //shrink it by the difference (need an extra pixel somewhere)
- fgeom.setHeight( fgeom.height()-diff );
- }
- }
- //Now move/resize the window
- if(DEBUG){
- qDebug() << " - New Geom:" << geom << fgeom;
- }
- XCB->WM_Request_MoveResize_Window(win, geom);
- }
-
-}
-
-void LSession::SessionEnding(){
- stopSystemTray(); //just in case it was not stopped properly earlier
-}
-
-//===============
-// SYSTEM ACCESS
-//===============
-void LSession::LaunchApplication(QString cmd){
- LSession::setOverrideCursor(QCursor(Qt::BusyCursor));
- QProcess::startDetached(cmd);
-}
-
-QFileInfoList LSession::DesktopFiles(){
- return desktopFiles;
-}
-
-QRect LSession::screenGeom(int num){
- if(num < 0 || num >= this->desktop()->screenCount() ){ return QRect(); }
- QRect geom = this->desktop()->screenGeometry(num);
- return geom;
-}
-
-AppMenu* LSession::applicationMenu(){
- return appmenu;
-}
-
-SettingsMenu* LSession::settingsMenu(){
- return settingsmenu;
-}
-
-QSettings* LSession::sessionSettings(){
- return sessionsettings;
-}
-
-QSettings* LSession::DesktopPluginSettings(){
- return DPlugSettings;
-}
-
-WId LSession::activeWindow(){
- //Check the last active window pointer first
- WId active = XCB->ActiveWindow();
- //qDebug() << "Check Active Window:" << active << lastActiveWin;
- if(RunningApps.contains(active)){ lastActiveWin = active; }
- else if(RunningApps.contains(lastActiveWin) && XCB->WindowState(lastActiveWin) >= LXCB::VISIBLE){} //no change needed
- else if(RunningApps.contains(lastActiveWin) && RunningApps.length()>1){
- int start = RunningApps.indexOf(lastActiveWin);
- if(start<1){ lastActiveWin = RunningApps.length()-1; } //wrap around to the last item
- else{ lastActiveWin = RunningApps[start-1]; }
- }else{
- //Need to change the last active window - find the first one which is visible
- lastActiveWin = 0; //fallback value - nothing active
- for(int i=0; i<RunningApps.length(); i++){
- if(XCB->WindowState(RunningApps[i]) >= LXCB::VISIBLE){
- lastActiveWin = RunningApps[i];
- break;
- }
- }
- //qDebug() << " -- New Last Active Window:" << lastActiveWin;
- }
- return lastActiveWin;
-}
-
-//Temporarily change the session locale (nothing saved between sessions)
-void LSession::switchLocale(QString localeCode){
- currTranslator = LUtils::LoadTranslation(this, "lumina-desktop", localeCode, currTranslator);
- if(currTranslator!=0 || localeCode=="en_US"){
- LUtils::setLocaleEnv(localeCode); //will set everything to this locale (no custom settings)
- }
- emit LocaleChanged();
-}
-
-void LSession::systemWindow(){
- if(sysWindow==0){ sysWindow = new SystemWindow(); }
- else{ sysWindow->updateWindow(); }
- sysWindow->show();
- //LSession::processEvents();
-}
-
-//Play System Audio
-void LSession::playAudioFile(QString filepath){
- if( !QFile::exists(filepath) ){ return; }
- //Setup the audio output systems for the desktop
- if(DEBUG){ qDebug() << "Play Audio File"; }
- if(mediaObj==0){ qDebug() << " - Initialize media player"; mediaObj = new QMediaPlayer(); }
- if(mediaObj !=0 ){
- if(DEBUG){ qDebug() << " - starting playback:" << filepath; }
- mediaObj->setVolume(100);
- mediaObj->setMedia(QUrl::fromLocalFile(filepath));
- mediaObj->play();
- LSession::processEvents();
- }
- if(DEBUG){ qDebug() << " - Done with Audio File"; }
-}
-// =======================
-// XCB EVENT FILTER FUNCTIONS
-// =======================
-void LSession::RootSizeChange(){
- qDebug() << "Got Root Size Change";
- if(DESKTOPS.isEmpty()){ return; } //Initial setup not run yet
- screenTimer->start();
-}
-
-void LSession::WindowPropertyEvent(){
- if(DEBUG){ qDebug() << "Window Property Event"; }
- QList<WId> newapps = XCB->WindowList();
- if(RunningApps.length() < newapps.length()){
- //New Window found
- //qDebug() << "New window found";
- LSession::restoreOverrideCursor(); //restore the mouse cursor back to normal (new window opened?)
- //Perform sanity checks on any new window geometries
- for(int i=0; i<newapps.length() && !TrayStopping; i++){
- if(!RunningApps.contains(newapps[i])){
- checkWin << newapps[i];
- XCB->SelectInput(newapps[i]); //make sure we get property/focus events for this window
- if(DEBUG){ qDebug() << "New Window - check geom in a moment:" << XCB->WindowClass(newapps[i]); }
- QTimer::singleShot(50, this, SLOT(checkWindowGeoms()) );
- }
- }
- }
-
- //Now save the list and send out the event
- RunningApps = newapps;
- emit WindowListEvent();
-}
-
-void LSession::WindowPropertyEvent(WId win){
- //Emit the single-app signal if the window in question is one used by the task manager
- if(RunningApps.contains(win)){
- if(DEBUG){ qDebug() << "Single-window property event"; }
- //emit WindowListEvent();
- WindowPropertyEvent(); //Run through the entire routine for window checks
- }else if(RunningTrayApps.contains(win)){
- emit TrayIconChanged(win);
- }
-}
-
-void LSession::SysTrayDockRequest(WId win){
- if(TrayStopping){ return; }
- attachTrayWindow(win); //Check to see if the window is already registered
-}
-
-void LSession::WindowClosedEvent(WId win){
- if(TrayStopping){ return; }
- removeTrayWindow(win); //Check to see if the window is a tray app
-}
-
-void LSession::WindowConfigureEvent(WId win){
- if(TrayStopping){ return; }
- if(RunningTrayApps.contains(win)){
- if(DEBUG){ qDebug() << "SysTray: Configure Event"; }
- emit TrayIconChanged(win); //trigger a repaint event
- }else if(RunningApps.contains(win)){
- WindowPropertyEvent();
- }
-}
-
-void LSession::WindowDamageEvent(WId win){
- if(TrayStopping){ return; }
- if(RunningTrayApps.contains(win)){
- if(DEBUG){ qDebug() << "SysTray: Damage Event"; }
- emit TrayIconChanged(win); //trigger a repaint event
- }
-}
-
-void LSession::WindowSelectionClearEvent(WId win){
- if(win==SystemTrayID && !TrayStopping){
- qDebug() << "Stopping system tray";
- stopSystemTray(true); //make sure to detach all windows
- }
-}
-
-
-//======================
-// SYSTEM TRAY FUNCTIONS
-//======================
-bool LSession::registerVisualTray(WId visualTray){
- //Only one visual tray can be registered at a time
- // (limitation of how tray apps are embedded)
- if(TrayStopping){ return false; }
- else if(VisualTrayID==0){ VisualTrayID = visualTray; return true; }
- else if(VisualTrayID==visualTray){ return true; }
- else{ return false; }
-}
-
-void LSession::unregisterVisualTray(WId visualTray){
- if(VisualTrayID==visualTray){
- qDebug() << "Unregistered Visual Tray";
- VisualTrayID=0;
- if(!TrayStopping){ emit VisualTrayAvailable(); }
- }
-}
-
-QList<WId> LSession::currentTrayApps(WId visualTray){
- if(visualTray==VisualTrayID){
- //Check the validity of all the current tray apps (make sure nothing closed erratically)
- for(int i=0; i<RunningTrayApps.length(); i++){
- if(XCB->WindowClass(RunningTrayApps[i]).isEmpty()){ RunningTrayApps.removeAt(i); i--; }
- }
- return RunningTrayApps;
- }else if( registerVisualTray(visualTray) ){
- return RunningTrayApps;
- }else{
- return QList<WId>();
- }
-}
-
-void LSession::startSystemTray(){
- if(SystemTrayID!=0){ return; }
- RunningTrayApps.clear(); //nothing running yet
- SystemTrayID = XCB->startSystemTray(0);
- TrayStopping = false;
- if(SystemTrayID!=0){
- XCB->SelectInput(SystemTrayID); //make sure TrayID events get forwarded here
- TrayDmgEvent = XCB->GenerateDamageID(SystemTrayID);
- evFilter->setTrayDamageFlag(TrayDmgEvent);
- qDebug() << "System Tray Started Successfully";
- if(DEBUG){ qDebug() << " - System Tray Flags:" << TrayDmgEvent << TrayDmgError; }
- }
-}
-
-void LSession::stopSystemTray(bool detachall){
- if(TrayStopping){ return; } //already run
- qDebug() << "Stopping system tray...";
- TrayStopping = true; //make sure the internal list does not modified during this
- //Close all the running Tray Apps
- QList<WId> tmpApps = RunningTrayApps;
- RunningTrayApps.clear(); //clear this ahead of time so tray's do not attempt to re-access the apps
- if(!detachall){
- for(int i=0; i<tmpApps.length(); i++){
- qDebug() << " - Stopping tray app:" << XCB->WindowClass(tmpApps[i]);
- //Tray apps are special and closing the window does not close the app
- XCB->KillClient(tmpApps[i]);
- LSession::processEvents();
- }
- }
- //Now close down the tray backend
- XCB->closeSystemTray(SystemTrayID);
- SystemTrayID = 0;
- TrayDmgEvent = 0;
- TrayDmgError = 0;
- evFilter->setTrayDamageFlag(0); //turn off tray event handling
- emit TrayListChanged();
- LSession::processEvents();
-}
-
-void LSession::attachTrayWindow(WId win){
- //static int appnum = 0;
- if(TrayStopping){ return; }
- if(RunningTrayApps.contains(win)){ return; } //already managed
- qDebug() << "Session Tray: Window Added";
- RunningTrayApps << win;
- LSession::restoreOverrideCursor();
- if(DEBUG){ qDebug() << "Tray List Changed"; }
- emit TrayListChanged();
-}
-
-void LSession::removeTrayWindow(WId win){
- if(SystemTrayID==0){ return; }
- for(int i=0; i<RunningTrayApps.length(); i++){
- if(win==RunningTrayApps[i]){
- qDebug() << "Session Tray: Window Removed";
- RunningTrayApps.removeAt(i);
- emit TrayListChanged();
- break;
- }
- }
-}
-//=========================
-// START MENU FUNCTIONS
-//=========================
-bool LSession::registerStartButton(QString ID){
- if(StartButtonID.isEmpty()){ StartButtonID = ID; }
- return (StartButtonID==ID);
-}
-
-void LSession::unregisterStartButton(QString ID){
- if(StartButtonID == ID){
- StartButtonID.clear();
- emit StartButtonAvailable();
- }
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/LSession.h b/src-qt5/core/lumina-desktop-unified/src-DE/LSession.h
deleted file mode 100644
index bd93289a..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/LSession.h
+++ /dev/null
@@ -1,193 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2012-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_DESKTOP_SESSION_H
-#define _LUMINA_DESKTOP_SESSION_H
-
-#include <QApplication>
-#include <QDebug>
-#include <QString>
-#include <QX11Info>
-#include <QEvent>
-#include <QTranslator>
-#include <QSettings>
-#include <QProxyStyle>
-#include <QDesktopWidget>
-#include <QList>
-#include <QThread>
-#include <QMediaPlayer>
-#include <QThread>
-#include <QUrl>
-
-#include "Globals.h"
-#include "AppMenu.h"
-#include "SettingsMenu.h"
-#include "SystemWindow.h"
-#include "LDesktop.h"
-//#include "WMProcess.h"
-//#include "BootSplash.h"
-
-#include <LuminaX11.h>
-#include <LuminaSingleApplication.h>
-
-//SYSTEM TRAY STANDARD DEFINITIONS
-#define SYSTEM_TRAY_REQUEST_DOCK 0
-#define SYSTEM_TRAY_BEGIN_MESSAGE 1
-#define SYSTEM_TRAY_CANCEL_MESSAGE 2
-
-/*class MenuProxyStyle : public QProxyStyle{
-public:
- int pixelMetric(PixelMetric metric, const QStyleOption *option=0, const QWidget *widget=0) const{
- if(metric==PM_SmallIconSize){ return 22; } //override QMenu icon size (make it larger)
- else{ return QProxyStyle::pixelMetric(metric, option, widget); } //use the current style for everything else
- }
-};*/
-
-class LSession : public LSingleApplication{
- Q_OBJECT
-public:
- LSession(int &argc, char **argv);
- ~LSession();
- //Functions to be called during startup
- void setupSession();
-
- //Public System Tray Functions
- QList<WId> currentTrayApps(WId visualTray);
- bool registerVisualTray(WId);
- void unregisterVisualTray(WId);
-
- //Public start menu buttons
- bool registerStartButton(QString ID);
- void unregisterStartButton(QString ID);
-
- //Special functions for XCB event filter parsing only
- // (DO NOT USE MANUALLY)
- void RootSizeChange();
- void WindowPropertyEvent();
- void WindowPropertyEvent(WId);
- void SysTrayDockRequest(WId);
- void WindowClosedEvent(WId);
- void WindowConfigureEvent(WId);
- void WindowDamageEvent(WId);
- void WindowSelectionClearEvent(WId);
-
- //System Access
- //Return a pointer to the current session
- static LSession* handle(){
- return static_cast<LSession*>(LSession::instance());
- }
-
- static void LaunchApplication(QString cmd);
- QFileInfoList DesktopFiles();
-
- QRect screenGeom(int num);
-
- AppMenu* applicationMenu();
- void systemWindow();
- SettingsMenu* settingsMenu();
- LXCB *XCB; //class for XCB usage
-
- QSettings* sessionSettings();
- QSettings* DesktopPluginSettings();
-
- //Keep track of which non-desktop window should be treated as active
- WId activeWindow(); //This will return the last active window if a desktop element is currently active
-
- //Temporarily change the session locale (nothing saved between sessions)
- void switchLocale(QString localeCode);
-
- //Play System Audio
- void playAudioFile(QString filepath);
- //Window Adjustment Routine (due to Fluxbox not respecting _NET_WM_STRUT)
- void adjustWindowGeom(WId win, bool maximize = false);
-
-private:
- //WMProcess *WM;
- QList<LDesktop*> DESKTOPS;
- QFileSystemWatcher *watcher;
- QTimer *screenTimer;
-
- //Internal variable for global usage
- AppMenu *appmenu;
- SettingsMenu *settingsmenu;
- SystemWindow *sysWindow;
- QTranslator *currTranslator;
- QMediaPlayer *mediaObj;
- QSettings *sessionsettings, *DPlugSettings;
- bool cleansession;
- //QList<QRect> savedScreens;
-
- //System Tray Variables
- WId SystemTrayID, VisualTrayID;
- int TrayDmgEvent, TrayDmgError;
- QList<WId> RunningTrayApps;
- bool TrayStopping;
- //Start Button Variables
- QString StartButtonID;
-
- //Task Manager Variables
- WId lastActiveWin;
- QList<WId> RunningApps;
- QList<WId> checkWin;
- QFileInfoList desktopFiles;
-
- void CleanupSession();
-
- int VersionStringToNumber(QString version);
-
-public slots:
- void StartLogout();
- void StartShutdown(bool skipupdates = false);
- void StartReboot(bool skipupdates = false);
-
- void reloadIconTheme();
-
-private slots:
- void NewCommunication(QStringList);
- void launchStartupApps(); //used during initialization
- void watcherChange(QString);
- void screensChanged();
- void screenResized(int);
- void checkWindowGeoms();
-
- //System Tray Functions
- void startSystemTray();
- void stopSystemTray(bool detachall = false);
- void attachTrayWindow(WId);
- void removeTrayWindow(WId);
-
- //Internal simplification functions
- void checkUserFiles();
- void refreshWindowManager();
- void updateDesktops();
- void registerDesktopWindows();
-
-
- void SessionEnding();
-
-signals:
- //System Tray Signals
- void VisualTrayAvailable(); //new Visual Tray Plugin can be registered
- void TrayListChanged(); //Item added/removed from the list
- void TrayIconChanged(WId); //WinID of Tray App
- //Start Button signals
- void StartButtonAvailable();
- void StartButtonActivated();
- //Task Manager Signals
- void WindowListEvent(WId);
- void WindowListEvent();
- //General Signals
- void LocaleChanged();
- void IconThemeChanged();
- void DesktopConfigChanged();
- void SessionConfigChanged();
- void FavoritesChanged();
- void DesktopFilesChanged();
- void WorkspaceChanged();
-
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/LWinInfo.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/LWinInfo.cpp
deleted file mode 100644
index 6a6cea0b..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/LWinInfo.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LWinInfo.h"
-
-#include <LuminaX11.h>
-
-#include "LSession.h"
-
-//Information Retrieval
- // Don't cache these results because they can change regularly
-QString LWinInfo::text(){
- if(window==0){ return ""; }
- QString nm = LSession::handle()->XCB->WindowVisibleIconName(window);
- if(nm.simplified().isEmpty()){ nm = LSession::handle()->XCB->WindowIconName(window); }
- if(nm.simplified().isEmpty()){ nm = LSession::handle()->XCB->WindowVisibleName(window); }
- if(nm.simplified().isEmpty()){ nm = LSession::handle()->XCB->WindowName(window); }
- if(nm.simplified().isEmpty()){ nm = LSession::handle()->XCB->OldWindowIconName(window); }
- if(nm.simplified().isEmpty()){ nm = LSession::handle()->XCB->OldWindowName(window); }
- //Make sure that the text is a reasonable size (40 char limit)
- //if(nm.length()>40){ nm = nm.left(40)+"..."; }
- return nm;
-}
-
-QIcon LWinInfo::icon(bool &noicon){
- if(window==0){ noicon = true; return QIcon();}
- noicon = false;
- QIcon ico = LSession::handle()->XCB->WindowIcon(window);
- //Check for a null icon, and supply one if necessary
- if(ico.isNull()){ ico = LXDG::findIcon( this->Class().toLower(),""); }
- if(ico.isNull()){ico = LXDG::findIcon("preferences-system-windows",""); noicon=true;}
- return ico;
-}
-
-QString LWinInfo::Class(){
- return LSession::handle()->XCB->WindowClass(window);
-}
-
-LXCB::WINDOWVISIBILITY LWinInfo::status(bool update){
- if(window==0){ return LXCB::IGNORE; }
- if(update || cstate == LXCB::IGNORE){
- cstate = LSession::handle()->XCB->WindowState(window);
- }
- return cstate;
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/LWinInfo.h b/src-qt5/core/lumina-desktop-unified/src-DE/LWinInfo.h
deleted file mode 100644
index 3d2ea65a..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/LWinInfo.h
+++ /dev/null
@@ -1,50 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_DESKTOP_WINDOW_INFO_H
-#define _LUMINA_DESKTOP_WINDOW_INFO_H
-
-// Qt includes
-#include <QString>
-#include <QPixmap>
-#include <QIcon>
-#include <QPainter>
-
-// libLumina includes
-#include <LuminaX11.h>
-#include <LuminaXDG.h>
-
-// Local includes
-//#include "Globals.h" //For the STATES enumeration definition
-//#include "LSession.h"
-
-
-class LWinInfo{
-private:
- WId window;
- LXCB::WINDOWVISIBILITY cstate; //current window state
-
-public:
- LWinInfo(WId id = 0){
- window = id;
- cstate = LXCB::IGNORE; //make sure this gets updates with the first "status" call
- }
- ~LWinInfo(){};
-
- //The current window ID
- WId windowID(){
- return window;
- }
-
- //Information Retrieval
- // Don't cache these results because they can change regularly
- QString text();
- QIcon icon(bool &noicon);
- QString Class();
- LXCB::WINDOWVISIBILITY status(bool update = false);
-};
-
-#endif \ No newline at end of file
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/LXcbEventFilter.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/LXcbEventFilter.cpp
deleted file mode 100644
index ca7fb38d..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/LXcbEventFilter.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2012, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LXcbEventFilter.h"
-
-//For all the XCB interactions and atoms
-// is accessed via
-// session->XCB->EWMH.(atom name)
-// session->XCB->(do something)
-#include <LuminaX11.h>
-#include <QDebug>
-
-XCBEventFilter::XCBEventFilter(LSession *sessionhandle) : QAbstractNativeEventFilter(){
- session = sessionhandle; //save this for interaction with the session later
- TrayDmgFlag = 0;
- stopping = false;
- session->XCB->SelectInput(QX11Info::appRootWindow()); //make sure we get root window events
- InitAtoms();
-}
-
-void XCBEventFilter::setTrayDamageFlag(int flag){
- //Special flag for system tray damage events
- TrayDmgFlag = flag + XCB_DAMAGE_NOTIFY; //save the whole flag (no calculations later)
-}
-
-//This function format taken directly from the Qt5.3 documentation
-bool XCBEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *){
- if(stopping){ return false; } //don't do any parsing
- //qDebug() << "New Event";
- if(eventType=="xcb_generic_event_t"){
- //qDebug() << " - XCB event";
- //Convert to known event type (for X11 systems)
- xcb_generic_event_t *ev = static_cast<xcb_generic_event_t *>(message);
- //Now parse the event and emit signals as necessary
- switch( ev->response_type & ~0x80){
-//==============================
- case XCB_PROPERTY_NOTIFY:
- //qDebug() << "Property Notify Event:";
- //qDebug() << " - Root Window:" << QX11Info::appRootWindow();
- //qDebug() << " - Given Window:" << ((xcb_property_notify_event_t*)ev)->window;
- //System-specific proprty change
- if( ((xcb_property_notify_event_t*)ev)->window == QX11Info::appRootWindow() \
- && ( ( ((xcb_property_notify_event_t*)ev)->atom == session->XCB->EWMH._NET_DESKTOP_GEOMETRY) \
- || (((xcb_property_notify_event_t*)ev)->atom == session->XCB->EWMH._NET_WORKAREA) )){
- session->RootSizeChange();
- }else if( ((xcb_property_notify_event_t*)ev)->window == QX11Info::appRootWindow() \
- && ( ( ((xcb_property_notify_event_t*)ev)->atom == session->XCB->EWMH._NET_CURRENT_DESKTOP) )){
- //qDebug() << "Got Workspace Change";
- session->emit WorkspaceChanged();
- }else if( SysNotifyAtoms.contains( ((xcb_property_notify_event_t*)ev)->atom ) ){
- //Update the status/list of all running windows
- session->WindowPropertyEvent();
-
- //window-specific property change
- }else if( WinNotifyAtoms.contains( ((xcb_property_notify_event_t*)ev)->atom ) ){
- //Ping only that window
- //session->WindowPropertyEvent( ((xcb_property_notify_event_t*)ev)->window );
- session->WindowPropertyEvent();
- }
- break;
-//==============================
- case XCB_CLIENT_MESSAGE:
- //qDebug() << "Client Message Event";
- //qDebug() << " - Root Window:" << QX11Info::appRootWindow();
- //qDebug() << " - Given Window:" << ((xcb_client_message_event_t*)ev)->window;
- if( TrayDmgFlag!=0 && ((xcb_client_message_event_t*)ev)->type == _NET_SYSTEM_TRAY_OPCODE && ((xcb_client_message_event_t*)ev)->format == 32){
- //data32[0] is timestamp, [1] is opcode, [2] is window handle
- if(SYSTEM_TRAY_REQUEST_DOCK == ((xcb_client_message_event_t*)ev)->data.data32[1]){
- session->SysTrayDockRequest( ((xcb_client_message_event_t*)ev)->data.data32[2] );
- }
- //Ignore the System Tray messages at the moment (let the WM handle it)
-
- //window-specific property changes
- /*}else if( ((xcb_client_message_event_t*)ev)->type == session->XCB->EWMH._NET_WM_STATE ){
- if( session->XCB->WindowIsMaximized( ((xcb_client_message_event_t*)ev)->window ) ){
- //Quick fix for maximized windows (since Fluxbox is not doing the STRUT detection properly)
- session->adjustWindowGeom( ((xcb_client_message_event_t*)ev)->window );
- }
- session->WindowPropertyEvent( ((xcb_client_message_event_t*)ev)->window );*/
- }else if( WinNotifyAtoms.contains( ((xcb_client_message_event_t*)ev)->type ) ){
- //Ping only that window
- //session->WindowPropertyEvent( ((xcb_client_message_event_t*)ev)->window );
- session->WindowPropertyEvent();
- }
- break;
-//==============================
- case XCB_DESTROY_NOTIFY:
- //qDebug() << "Window Closed Event";
- session->WindowClosedEvent( ( (xcb_destroy_notify_event_t*)ev )->window );
- break;
-//==============================
- case XCB_CONFIGURE_NOTIFY:
- //qDebug() << "Configure Notify Event";
- session->WindowConfigureEvent( ((xcb_configure_notify_event_t*)ev)->window );
- break;
-//==============================
- case XCB_SELECTION_CLEAR:
- //qDebug() << "Selection Clear Event";
- session->WindowSelectionClearEvent( ((xcb_selection_clear_event_t*)ev)->owner );
- break;
-//==============================
- default:
- if(TrayDmgFlag!=0){
- //if( (ev->response_type & ~0x80)==TrayDmgFlag){
- session->WindowDamageEvent( ((xcb_damage_notify_event_t*)ev)->drawable );
- //}
- }/*else{
- qDebug() << "Default Event:" << (ev->response_type & ~0x80);
- }*/
-//==============================
- }
- }
- //qDebug() << " - finished event";
- return false; //make sure the handling keeps going (transparent watching of events)
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/LXcbEventFilter.h b/src-qt5/core/lumina-desktop-unified/src-DE/LXcbEventFilter.h
deleted file mode 100644
index c56471c9..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/LXcbEventFilter.h
+++ /dev/null
@@ -1,104 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2012, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This class provides the XCB ->Xlib conversion necessary for Qt5 usage
-//===========================================
-#ifndef _LUMINA_DESKTOP_XCB_FILTER_H
-#define _LUMINA_DESKTOP_XCB_FILTER_H
-
-#include <QAbstractNativeEventFilter>
-#include <QList>
-#include <QStringList>
-#include <QX11Info>
-
-#include <xcb/xcb.h>
-#include <xcb/xproto.h>
-#include <xcb/damage.h>
-#include <xcb/xcb_atom.h>
-#include "LSession.h"
-
-/*
-List of XCB response types (since almost impossible to find good docs on XCB)
-switch (xcb_generic_event_t*->response_type & ~0x80)
-case values:
-XCB_KEY_[PRESS | RELEASE]
-XCB_BUTTON_[PRESS | RELEASE]
-XCB_MOTION_NOTIFY
-XCB_ENTER_NOTIFY
-XCB_LEAVE_NOTIFY
-XCB_FOCUS_[IN | OUT]
-XCB_KEYMAP_NOTIFY
-XCB_EXPOSE
-XCB_GRAPHICS_EXPOSURE
-XCB_VISIBILITY_NOTIFY
-XCB_CREATE_NOTIFY
-XCB_DESTROY_NOTIFY
-XCB_UNMAP_NOTIFY
-XCB_MAP_[NOTIFY | REQUEST]
-XCB_REPARENT_NOTIFY
-XCB_CONFIGURE_[NOTIFY | REQUEST]
-XCB_GRAVITY_NOTIFY
-XCB_RESIZE_REQUEST
-XCB_CIRCULATE_[NOTIFY | REQUEST]
-XCB_PROPERTY_NOTIFY
-XCB_SELECTION_[CLEAR | REQUEST | NOTIFY]
-XCB_COLORMAP_NOTIFY
-XCB_CLIENT_MESSAGE
-
-*/
-
-//SYSTEM TRAY STANDARD DEFINITIONS
-#define SYSTEM_TRAY_REQUEST_DOCK 0
-#define SYSTEM_TRAY_BEGIN_MESSAGE 1
-#define SYSTEM_TRAY_CANCEL_MESSAGE 2
-
-class XCBEventFilter : public QAbstractNativeEventFilter{
-private:
- LSession *session;
- xcb_atom_t _NET_SYSTEM_TRAY_OPCODE;
- QList<xcb_atom_t> WinNotifyAtoms, SysNotifyAtoms;
- int TrayDmgFlag; //internal damage event offset value for the system tray
- bool stopping;
-
- void InitAtoms(){
- //Initialize any special atoms that we need to save/use regularly
- //NOTE: All the EWMH atoms are already saved in session->XCB->EWMH
- WinNotifyAtoms.clear();
- WinNotifyAtoms << session->XCB->EWMH._NET_WM_NAME \
- << session->XCB->EWMH._NET_WM_VISIBLE_NAME \
- << session->XCB->EWMH._NET_WM_ICON_NAME \
- << session->XCB->EWMH._NET_WM_VISIBLE_ICON_NAME \
- << session->XCB->EWMH._NET_WM_ICON \
- << session->XCB->EWMH._NET_WM_ICON_GEOMETRY;
-
- SysNotifyAtoms.clear();
- SysNotifyAtoms << session->XCB->EWMH._NET_CLIENT_LIST \
- << session->XCB->EWMH._NET_CLIENT_LIST_STACKING \
- << session->XCB->EWMH._NET_CURRENT_DESKTOP \
- << session->XCB->EWMH._NET_WM_STATE \
- << session->XCB->EWMH._NET_ACTIVE_WINDOW \
- << session->XCB->EWMH._NET_WM_ICON \
- << session->XCB->EWMH._NET_WM_ICON_GEOMETRY;
- //_NET_SYSTEM_TRAY_OPCODE
- xcb_intern_atom_cookie_t cookie = xcb_intern_atom(QX11Info::connection(), 0, 23,"_NET_SYSTEM_TRAY_OPCODE");
- xcb_intern_atom_reply_t *r = xcb_intern_atom_reply(QX11Info::connection(), cookie, NULL);
- if(r){
- _NET_SYSTEM_TRAY_OPCODE = r->atom;
- free(r);
- }
- }
-
-public:
- XCBEventFilter(LSession *sessionhandle);
- void setTrayDamageFlag(int flag);
- void StopEventHandling(){ stopping = true; }
-
- //This function format taken directly from the Qt5.3 documentation
- virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE;
-
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/SettingsMenu.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/SettingsMenu.cpp
deleted file mode 100644
index 58208931..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/SettingsMenu.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "SettingsMenu.h"
-#include "LSession.h"
-
-#include <LuminaOS.h>
-
-SettingsMenu::SettingsMenu() : QMenu(){
- this->setObjectName("SettingsMenu");
- connect(this, SIGNAL(triggered(QAction*)), this, SLOT(runApp(QAction*)) );
- connect(QApplication::instance(), SIGNAL(LocaleChanged()), this, SLOT(UpdateMenu()) );
- connect(QApplication::instance(), SIGNAL(IconThemeChanged()), this, SLOT(UpdateMenu()) );
- QTimer::singleShot(100, this, SLOT(UpdateMenu()) );
-}
-
-SettingsMenu::~SettingsMenu(){
-
-}
-
-void SettingsMenu::UpdateMenu(){
- //Change the title/icon to account for locale/icon changes
- this->setTitle( tr("Preferences") );
- this->setIcon( LXDG::findIcon("configure","") );
- this->clear();
- //Now setup the possible configuration options
- QAction *act = new QAction(LXDG::findIcon("preferences-desktop-screensaver",""), tr("Screensaver"), this);
- act->setWhatsThis("xscreensaver-demo");
- this->addAction(act);
- act = new QAction( LXDG::findIcon("preferences-desktop-wallpaper",""), tr("Wallpaper"), this);
- act->setWhatsThis("lumina-config --page wallpaper");
- this->addAction(act);
- act = new QAction( LXDG::findIcon("preferences-other",""), tr("Display"), this);
- act->setWhatsThis("lumina-xconfig");
- this->addAction(act);
- act = new QAction( LXDG::findIcon("preferences-desktop",""), tr("All Desktop Settings"), this);
- act->setWhatsThis("lumina-config");
- this->addAction(act);
- this->addSeparator();
- /*QString qtconfig = LOS::QtConfigShortcut();
- if(QFile::exists(qtconfig) && !qtconfig.isEmpty()){
- act = new QAction( LXDG::findIcon("preferences-desktop-theme",""), tr("Window Theme"), this);
- act->setWhatsThis(qtconfig);
- this->addAction(act);
- }*/
- QString CONTROLPANEL = LOS::ControlPanelShortcut();
- if(QFile::exists(CONTROLPANEL) && !CONTROLPANEL.isEmpty()){
- //Now load the info
- XDGDesktop cpan(CONTROLPANEL);
- if(cpan.isValid()){
- act = new QAction( LXDG::findIcon(cpan.icon,""), tr("Control Panel"), this);
- act->setWhatsThis("lumina-open \""+CONTROLPANEL+"\"");
- this->addAction(act);
- }
- }
- act = new QAction( LXDG::findIcon("lumina",""), tr("About Lumina"), this);
- act->setWhatsThis("lumina-info");
- this->addAction(act);
-}
-
-
-void SettingsMenu::runApp(QAction* act){
- LSession::LaunchApplication(act->whatsThis());
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/SettingsMenu.h b/src-qt5/core/lumina-desktop-unified/src-DE/SettingsMenu.h
deleted file mode 100644
index eeabab85..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/SettingsMenu.h
+++ /dev/null
@@ -1,28 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_DESKTOP_SETTINGS_MENU_H
-#define _LUMINA_DESKTOP_SETTINGS_MENU_H
-
-#include <QMenu>
-#include <QProcess>
-#include <QAction>
-
-#include <LuminaXDG.h>
-
-class SettingsMenu : public QMenu{
- Q_OBJECT
-public:
- SettingsMenu();
- ~SettingsMenu();
-
-private slots:
- void UpdateMenu();
- void runApp(QAction* act);
-
-};
-
-#endif \ No newline at end of file
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/SystemWindow.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/SystemWindow.cpp
deleted file mode 100644
index 1c0b59a5..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/SystemWindow.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-#include "SystemWindow.h"
-#include "ui_SystemWindow.h"
-
-#include "LSession.h"
-#include <LuminaOS.h>
-#include <QPoint>
-#include <QCursor>
-#include <QDebug>
-#include <QProcess>
-#include <QDesktopWidget>
-#include <QMessageBox>
-
-SystemWindow::SystemWindow() : QDialog(), ui(new Ui::SystemWindow){
- ui->setupUi(this); //load the designer file
- //Setup the window flags
- this->setWindowFlags( Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
- //Setup the icons based on the current theme
- ui->tool_logout->setIcon( LXDG::findIcon("system-log-out","") );
- ui->tool_restart->setIcon( LXDG::findIcon("system-reboot","") );
- ui->tool_shutdown->setIcon( LXDG::findIcon("system-shutdown","") );
- ui->tool_suspend->setIcon( LXDG::findIcon("system-suspend","") );
- ui->push_cancel->setIcon( LXDG::findIcon("dialog-cancel","") );
- ui->push_lock->setIcon( LXDG::findIcon("system-lock-screen","") );
- //Connect the signals/slots
- connect(ui->tool_logout, SIGNAL(clicked()), this, SLOT(sysLogout()) );
- connect(ui->tool_restart, SIGNAL(clicked()), this, SLOT(sysRestart()) );
- connect(ui->tool_shutdown, SIGNAL(clicked()), this, SLOT(sysShutdown()) );
- connect(ui->tool_suspend, SIGNAL(clicked()), this, SLOT(sysSuspend()) );
- connect(ui->push_cancel, SIGNAL(clicked()), this, SLOT(sysCancel()) );
- connect(ui->push_lock, SIGNAL(clicked()), this, SLOT(sysLock()) );
- //Disable buttons if necessary
- updateWindow();
- ui->tool_suspend->setVisible(LOS::systemCanSuspend()); //does not change with time - just do a single check
- connect(QApplication::instance(), SIGNAL(LocaleChanged()), this, SLOT(updateWindow()) );
- connect(QApplication::instance(), SIGNAL(IconThemeChanged()), this, SLOT(updateWindow()) );
-}
-
-SystemWindow::~SystemWindow(){
-
-}
-
-void SystemWindow::updateWindow(){
- //Disable the shutdown/restart buttons if necessary
- ui->retranslateUi(this);
- bool ok = LOS::userHasShutdownAccess();
- ui->tool_restart->setEnabled(ok);
- ui->tool_shutdown->setEnabled(ok);
- //Center this window on the current screen
- QPoint center = QApplication::desktop()->screenGeometry(QCursor::pos()).center(); //get the center of the current screen
- this->move(center.x() - this->width()/2, center.y() - this->height()/2);
-}
-
-bool SystemWindow::promptAboutUpdates(bool &skip){
- QString pending = LOS::systemPendingUpdates();
- if(pending.isEmpty()){ skip = false; } //continue without skip
- else{
- QMessageBox dlg(QMessageBox::Question, tr("Apply Updates?"), tr("You have system updates waiting to be applied! Do you wish to install them now?"), QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, this);
- dlg.setDetailedText(pending);
- dlg.setDefaultButton(QMessageBox::Yes);
- dlg.show();
- int ret = dlg.exec();
- if(ret == QMessageBox::Cancel){ return false; } //do not continue
- else{ skip = (ret==QMessageBox::No); }
- }
- return true;
-}
-
-void SystemWindow::sysLogout(){
- this->close();
- LSession::processEvents();
- QTimer::singleShot(0, LSession::handle(), SLOT(StartLogout()) );
-}
-
-void SystemWindow::sysRestart(){
- bool skip = false;
- if(!promptAboutUpdates(skip)){ this->close(); return; } //cancelled
- this->close();
- LSession::processEvents();
- LSession::handle()->StartReboot(skip);
-}
-
-void SystemWindow::sysShutdown(){
- bool skip = false;
- if(!promptAboutUpdates(skip)){ this->close(); return; } //cancelled
- this->close();
- LSession::processEvents();
- LSession::handle()->StartShutdown(skip);
-}
-
-void SystemWindow::sysSuspend(){
- this->hide();
- LSession::processEvents();
- //Make sure to lock the system first (otherwise anybody can access it again)
- LUtils::runCmd("xscreensaver-command -lock");
- //Now suspend the system
- LOS::systemSuspend();
-}
-
-void SystemWindow::sysLock(){
- this->hide();
- LSession::processEvents();
- qDebug() << "Locking the desktop...";
- QProcess::startDetached("xscreensaver-command -lock");
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/SystemWindow.h b/src-qt5/core/lumina-desktop-unified/src-DE/SystemWindow.h
deleted file mode 100644
index bbef36a3..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/SystemWindow.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef _LUMINA_DESKTOP_SYSTEM_WINDOW_H
-#define _LUMINA_DESKTOP_SYSTEM_WINDOW_H
-
-#include <QDialog>
-
-#include "ui_SystemWindow.h"
-
-
-
-
-namespace Ui{
- class SystemWindow;
-};
-
-class SystemWindow : public QDialog{
- Q_OBJECT
-public:
- SystemWindow();
- ~SystemWindow();
-
-public slots:
- void updateWindow();
-
-private:
- Ui::SystemWindow *ui;
-
- //void closeAllWindows();
- bool promptAboutUpdates(bool &skip); //main bool return: continue/cancel, skip: skip updates or not
-
-private slots:
- void sysLogout();
-
- void sysRestart();
-
- void sysShutdown();
-
- void sysSuspend();
-
- void sysCancel(){
- this->close();
- }
-
- void sysLock();
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/SystemWindow.ui b/src-qt5/core/lumina-desktop-unified/src-DE/SystemWindow.ui
deleted file mode 100644
index 9e25509b..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/SystemWindow.ui
+++ /dev/null
@@ -1,194 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>SystemWindow</class>
- <widget class="QDialog" name="SystemWindow">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>289</width>
- <height>135</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>System Options</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="leftMargin">
- <number>2</number>
- </property>
- <property name="topMargin">
- <number>2</number>
- </property>
- <property name="rightMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>2</number>
- </property>
- <item>
- <widget class="QFrame" name="frame">
- <property name="frameShape">
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <property name="leftMargin">
- <number>3</number>
- </property>
- <property name="topMargin">
- <number>3</number>
- </property>
- <property name="rightMargin">
- <number>3</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QToolButton" name="tool_logout">
- <property name="text">
- <string>Log Out</string>
- </property>
- <property name="iconSize">
- <size>
- <width>64</width>
- <height>64</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextUnderIcon</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_restart">
- <property name="text">
- <string>Restart</string>
- </property>
- <property name="iconSize">
- <size>
- <width>64</width>
- <height>64</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextUnderIcon</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_shutdown">
- <property name="text">
- <string>Shutdown</string>
- </property>
- <property name="iconSize">
- <size>
- <width>64</width>
- <height>64</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextUnderIcon</enum>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="Line" name="line">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="QToolButton" name="push_cancel">
- <property name="text">
- <string>Cancel</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextUnderIcon</enum>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QToolButton" name="push_lock">
- <property name="text">
- <string>Lock</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextUnderIcon</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_suspend">
- <property name="text">
- <string>Suspend</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextUnderIcon</enum>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/LDPlugin.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/LDPlugin.cpp
deleted file mode 100644
index 545ba430..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/LDPlugin.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LDPlugin.h"
-
-#include "../LSession.h"
-#include <LuminaXDG.h>
-
-LDPlugin::LDPlugin(QWidget *parent, QString id) : QFrame(parent){
- PLUGID=id;
- prefix = id.replace("/","_")+"/";
- //qDebug() << "ID:" << PLUGID << prefix;
- settings = LSession::handle()->DesktopPluginSettings();
- //Setup the plugin system control menu
- menu = new QMenu(this);
- setupMenu();
- //Setup the internal timer for when to start/stop drag events
- dragTimer = new QTimer(this);
- dragTimer->setSingleShot(true);
- dragTimer->setInterval(500); //1/2 second to show the plugin menu
- connect(dragTimer, SIGNAL(timeout()), this, SLOT(showPluginMenu()));
- //Use plugin-specific values for stylesheet control (applauncher, desktopview, etc...)
- this->setObjectName(id.section("---",0,0).section("::",0,0));
- this->setContextMenuPolicy(Qt::CustomContextMenu);
- this->setMouseTracking(false); //only catch mouse movement events if the mouse is clicked/held on the plugin
- connect(QApplication::instance(), SIGNAL(LocaleChanged()), this, SLOT(LocaleChange()) );
- connect(QApplication::instance(), SIGNAL(IconThemeChanged()), this, SLOT(ThemeChange()) );
- connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showPluginMenu()) );
-}
-
-void LDPlugin::setupMenu(){
- menu->clear();
- //SPECIAL CONTEXT MENU OPTIONS FOR PARTICULAR PLUGIN TYPES
- if(PLUGID.startsWith("applauncher::")){
- menu->addAction( LXDG::findIcon("quickopen",""), tr("Launch Item"), this, SIGNAL(PluginActivated()) );
- menu->addSeparator();
- }
- //General Options
- menu->addAction( LXDG::findIcon("transform-move",""), tr("Start Moving Item"), this, SLOT(slotStartMove()) );
- menu->addAction( LXDG::findIcon("transform-scale",""), tr("Start Resizing Item"), this, SLOT(slotStartResize()) );
- menu->addSeparator();
- menu->addAction( LXDG::findIcon("zoom-in",""), tr("Increase Item Sizes"), this, SIGNAL(IncreaseIconSize()) );
- menu->addAction( LXDG::findIcon("zoom-out",""), tr("Decrease Item Sizes"), this, SIGNAL(DecreaseIconSize()) );
- menu->addSeparator();
- menu->addAction( LXDG::findIcon("edit-delete",""), tr("Remove Item"), this, SLOT(slotRemovePlugin()) );
-}
-
-/*void LDPlugin::setInitialSize(int width, int height){
- //Note: Only run this in the plugin initization routine:
- // if the plugin is completely new (first time used), it will be this size
- if(settings->allKeys().filter(prefix+"location").isEmpty()){
- //Brand new plugin: set initial size
- //qDebug() << "Setting Initial Size:" << PLUGID << width << height;
- settings->setValue(prefix+"location/width",width);
- settings->setValue(prefix+"location/height",height);
- settings->sync();
- }
- //Now make sure the plugin is the saved size right away
- this->resize( settings->value(prefix+"location/width").toInt(), settings->value(prefix+"location/height").toInt());
-}*/
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/LDPlugin.h b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/LDPlugin.h
deleted file mode 100644
index 820880ed..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/LDPlugin.h
+++ /dev/null
@@ -1,156 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This class is the generic container layout for all desktop plugins
-// Simply subclass this when creating a new plugin to enable correct
-// visibility and usage within the desktop window
-//===========================================
-// WARNING: Do *not* setup a custom context menu for the entire plugins area!
-// This can prevent access to the general desktop context menu if
-// the plugin was maximized to fill the desktop area!
-//===========================================
-#ifndef _LUMINA_DESKTOP_DESKTOP_PLUGIN_H
-#define _LUMINA_DESKTOP_DESKTOP_PLUGIN_H
-
-#include <QObject>
-#include <QFrame>
-#include <QWidget>
-#include <QString>
-#include <QDebug>
-#include <QSettings>
-#include <QMoveEvent>
-#include <QResizeEvent>
-#include <QMouseEvent>
-#include <QTimer>
-#include <QMenu>
-
-class LDPlugin : public QFrame{
- Q_OBJECT
-
-private:
- QString PLUGID, prefix;
- QSettings *settings;
- QMenu *menu;
- QTimer *dragTimer;
-
- void setupMenu();
-
-public:
- LDPlugin(QWidget *parent = 0, QString id="unknown");
-
- ~LDPlugin(){}
-
- QString ID(){
- return PLUGID;
- }
-
- virtual QSize defaultPluginSize(){
- //This needs to be re-implemented in the subclassed plugin
- // The returned QSize is in grid points (typically 100 or 200 pixels square)
- return QSize(1,1); //1x1 grid size
- }
-
- void savePluginGeometry(QRect geom){
- settings->setValue(prefix+"geometry/desktopGridPoints", geom);
- settings->sync();
- }
-
- QRect loadPluginGeometry(){
- return settings->value(prefix+"geometry/desktopGridPoints", QRect()).toRect();
- }
-
- void saveSetting(QString var, QVariant val){
- //qDebug() << "Saving Setting:" << prefix+var+QString(" = ")+val.toString();
- settings->setValue(prefix+var, val);
- settings->sync();
- }
-
- QVariant readSetting(QString var, QVariant defaultval){
- return settings->value(prefix+var, defaultval);
- }
-
- virtual void Cleanup(){
- //This needs to be re-implemented in the subclassed plugin
- //This is where any last-minute changes are performed before a plugin is removed permanently
- //Note1: This is *not* called if the plugin is being temporarily closed
- //Note2: All the settings for this plugin will be automatically removed after this is finished
- }
-
- void removeSettings(bool permanent = false){ //such as when a plugin is deleted
- if(permanent){ Cleanup(); }
- QStringList list = settings->allKeys().filter(prefix);
- for(int i=0; i<list.length(); i++){ settings->remove(list[i]); }
-
- }
-
-public slots:
- virtual void LocaleChange(){
- //This needs to be re-implemented in the subclassed plugin
- //This is where all text is set/translated
- setupMenu();
- }
- virtual void ThemeChange(){
- //This needs to be re-implemented in the subclassed plugin
- //This is where all the visuals are set if using Theme-dependant icons.
- setupMenu();
- }
- void showPluginMenu(){
- emit CloseDesktopMenu();
- menu->popup( QCursor::pos() );
- }
-
-signals:
- void OpenDesktopMenu();
- void CloseDesktopMenu();
- void PluginResized();
- void PluginActivated();
-
- //Signals for communication with the desktop layout system (not generally used by hand)
- void StartMoving(QString); //ID of plugin
- void StartResizing(QString); //ID of plugin
- void RemovePlugin(QString); //ID of plugin
- void IncreaseIconSize(); // only used for desktop icons
- void DecreaseIconSize(); // only used for desktop icons
-
-private slots:
- void slotStartMove(){
- QCursor::setPos( this->mapToGlobal(QPoint(this->width()/2, this->height()/2)) );
- emit StartMoving(PLUGID);
- }
-
- void slotStartResize(){
- QCursor::setPos( this->mapToGlobal(QPoint(this->width()/2, this->height()/2)) );
- emit StartResizing(PLUGID);
- }
-
- void slotRemovePlugin(){
- removeSettings(true);
- emit RemovePlugin(PLUGID);
- }
-
-protected:
- void mousePressEvent(QMouseEvent *ev){
- if(!dragTimer->isActive() && ev->buttons().testFlag(Qt::LeftButton) ){ dragTimer->start(); }
- QWidget::mousePressEvent(ev);
- }
- void mouseReleaseEvent(QMouseEvent *ev){
- if(dragTimer->isActive()){ dragTimer->stop(); }
- QWidget::mouseReleaseEvent(ev);
- }
- void mouseMoveEvent(QMouseEvent *ev){
- if(ev->buttons().testFlag(Qt::LeftButton)){
- if(dragTimer->isActive()){ dragTimer->stop(); }
- slotStartMove();
- }
- QWidget::mouseMoveEvent(ev);
- }
- void resizeEvent(QResizeEvent *ev){
- emit PluginResized();
- QFrame::resizeEvent(ev); //do normal processing
- }
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/NewDP.h b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/NewDP.h
deleted file mode 100644
index e28b8c61..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/NewDP.h
+++ /dev/null
@@ -1,63 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This class is the interface to load all the different desktop plugins
-//===========================================
-#ifndef _LUMINA_DESKTOP_NEW_DESKTOP_PLUGIN_H
-#define _LUMINA_DESKTOP_NEW_DESKTOP_PLUGIN_H
-
-#include <QDebug>
-
-//List all the individual plugin includes here
-#include "LDPlugin.h"
-//#include "SamplePlugin.h"
-#include "calendar/CalendarPlugin.h"
-#include "applauncher/AppLauncherPlugin.h"
-#include "desktopview/DesktopViewPlugin.h"
-#include "notepad/NotepadPlugin.h"
-#include "audioplayer/PlayerWidget.h"
-#include "systemmonitor/MonitorWidget.h"
-//#include "quickcontainer/QuickDPlugin.h"
-//#include "messagecenter/MessageCenter.h"
-#include "rssreader/RSSFeedPlugin.h"
-
-class NewDP{
-public:
- static LDPlugin* createPlugin(QString plugin, QWidget* parent=0){
- //qDebug() << "Create Plugin:" << plugin;
- LDPlugin *plug = 0;
- /*if(plugin.section("---",0,0)=="sample"){
- plug = new SamplePlugin(parent, plugin);
- }else */
- if(plugin.section("---",0,0)=="calendar"){
- plug = new CalendarPlugin(parent, plugin);
- }else if(plugin.section("---",0,0).section("::",0,0)=="applauncher"){
- //This plugin can be pre-initialized to a file path after the "::" delimiter
- plug = new AppLauncherPlugin(parent, plugin);
- }else if(plugin.section("---",0,0)=="desktopview"){
- plug = new DesktopViewPlugin(parent, plugin);
- }else if(plugin.section("---",0,0)=="notepad"){
- plug = new NotePadPlugin(parent, plugin);
- }else if(plugin.section("---",0,0)=="audioplayer"){
- plug = new AudioPlayerPlugin(parent, plugin);
- }else if(plugin.section("---",0,0)=="systemmonitor"){
- plug = new SysMonitorPlugin(parent, plugin);
- //}else if(plugin.section("---",0,0)=="messagecenter"){
- //plug = new MessageCenterPlugin(parent, plugin);
- //}else if(plugin.section("---",0,0).startsWith("quick-") && LUtils::validQuickPlugin(plugin.section("---",0,0)) ){
- //plug = new QuickDPlugin(parent, plugin);
- }else if(plugin.section("---",0,0)=="rssreader"){
- plug = new RSSFeedPlugin(parent, plugin);
- }else{
- qWarning() << "Invalid Desktop Plugin:"<<plugin << " -- Ignored";
- }
- //qDebug() << " -- done";
- return plug;
- }
-
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/SamplePlugin.h b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/SamplePlugin.h
deleted file mode 100644
index 4a790c2d..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/SamplePlugin.h
+++ /dev/null
@@ -1,38 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This class is a quick sample desktop plugin
-//===========================================
-#ifndef _LUMINA_DESKTOP_DESKTOP_PLUGIN_SAMPLE_H
-#define _LUMINA_DESKTOP_DESKTOP_PLUGIN_SAMPLE_H
-
-#include <QPushButton>
-#include <QMessageBox>
-#include <QVBoxLayout>
-#include "LDPlugin.h"
-
-class SamplePlugin : public LDPlugin{
- Q_OBJECT
-public:
- SamplePlugin(QWidget* parent, QString ID) : LDPlugin(parent, ID){
- this->setLayout( new QVBoxLayout());
- this->layout()->setContentsMargins(0,0,0,0);
- button = new QPushButton("sample");
- this->layout()->addWidget(button);
- connect(button, SIGNAL(clicked()), this, SLOT(showMessage()) );
- }
-
- ~SamplePlugin(){}
-
-private:
- QPushButton *button;
-
-private slots:
- void showMessage(){
- QMessageBox::information(this,"sample","sample desktop plugin works");
- }
-};
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/applauncher/AppLauncherPlugin.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/applauncher/AppLauncherPlugin.cpp
deleted file mode 100644
index 3be19faa..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/applauncher/AppLauncherPlugin.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-#include "AppLauncherPlugin.h"
-#include "../../LSession.h"
-#include "OutlineToolButton.h"
-
-#define OUTMARGIN 10 //special margin for fonts due to the outlining effect from the OutlineToolbutton
-
-AppLauncherPlugin::AppLauncherPlugin(QWidget* parent, QString ID) : LDPlugin(parent, ID){
- QVBoxLayout *lay = new QVBoxLayout();
- this->setLayout(lay);
- lay->setContentsMargins(0,0,0,0);
- button = new OutlineToolButton(this);
- button->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
- button->setAutoRaise(true);
- button->setText("...\n..."); //Need to set something here so that initial sizing works properly
- button->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
- lay->addWidget(button, 0, Qt::AlignCenter);
- connect(button, SIGNAL(DoubleClicked()), this, SLOT(buttonClicked()) );
- button->setContextMenuPolicy(Qt::NoContextMenu);
- watcher = new QFileSystemWatcher(this);
- connect(watcher, SIGNAL(fileChanged(QString)), this, SLOT( loadButton()) );
-
- connect(this, SIGNAL(PluginActivated()), this, SLOT(buttonClicked()) ); //in case they use the context menu to launch it.
- loadButton();
- //QTimer::singleShot(0,this, SLOT(loadButton()) );
-}
-
-void AppLauncherPlugin::Cleanup(){
- //This is run only when the plugin was forcibly closed/removed
-
-}
-
-void AppLauncherPlugin::loadButton(){
- QString def = this->ID().section("::",1,50).section("---",0,0).simplified();
- QString path = this->readSetting("applicationpath",def).toString(); //use the default if necessary
- //qDebug() << "Default Application Launcher:" << def << path;
- bool ok = QFile::exists(path);
- if(!ok){ emit RemovePlugin(this->ID()); return;}
- int icosize = this->height()-4 - 2.2*button->fontMetrics().height();
- button->setFixedSize( this->width()-4, this->height()-4);
- button->setIconSize( QSize(icosize,icosize) );
- QString txt;
- if(path.endsWith(".desktop") && ok){
- XDGDesktop file(path);
- ok = !file.name.isEmpty();
- if(!ok){
- button->setWhatsThis("");
- button->setIcon( QIcon(LXDG::findIcon("quickopen-file","").pixmap(QSize(icosize,icosize)).scaledToHeight(icosize, Qt::SmoothTransformation) ) );
- txt = tr("Click to Set");
- if(!watcher->files().isEmpty()){ watcher->removePaths(watcher->files()); }
- }else{
- button->setWhatsThis(file.filePath);
- button->setIcon( QIcon(LXDG::findIcon(file.icon,"system-run").pixmap(QSize(icosize,icosize)).scaledToHeight(icosize, Qt::SmoothTransformation) ) );
- txt = file.name;
- if(!watcher->files().isEmpty()){ watcher->removePaths(watcher->files()); }
- watcher->addPath(file.filePath); //make sure to update this shortcut if the file changes
- }
- }else if(ok){
- QFileInfo info(path);
- button->setWhatsThis(info.absoluteFilePath());
- if(info.isDir()){
- button->setIcon( LXDG::findIcon("folder","") );
- }else if(LUtils::imageExtensions().contains(info.suffix().toLower()) ){
- QPixmap pix;
- if(pix.load(path)){ button->setIcon( QIcon(pix.scaled(256,256)) ); } //max size for thumbnails in memory
- else{ button->setIcon( LXDG::findIcon("dialog-cancel","") ); }
- }else{
- button->setIcon( QIcon(LXDG::findMimeIcon(path).pixmap(QSize(icosize,icosize)).scaledToHeight(icosize, Qt::SmoothTransformation) ) );
- }
- txt = info.fileName();
- if(!watcher->files().isEmpty()){ watcher->removePaths(watcher->files()); }
- watcher->addPath(path); //make sure to update this shortcut if the file changes
- }else{
- //InValid File
- button->setWhatsThis("");
- button->setIcon( QIcon(LXDG::findIcon("quickopen","dialog-cancel").pixmap(QSize(icosize,icosize)).scaledToHeight(icosize, Qt::SmoothTransformation) ) );
- button->setText( tr("Click to Set") );
- if(!watcher->files().isEmpty()){ watcher->removePaths(watcher->files()); }
- }
- //If the file is a symlink, put the overlay on the icon
- if(QFileInfo(path).isSymLink()){
- QImage img = button->icon().pixmap(QSize(icosize,icosize)).toImage();
- int oSize = icosize/3; //overlay size
- QPixmap overlay = LXDG::findIcon("emblem-symbolic-link").pixmap(oSize,oSize).scaled(oSize,oSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
- QPainter painter(&img);
- painter.drawPixmap(icosize-oSize,icosize-oSize,overlay); //put it in the bottom-right corner
- button->setIcon( QIcon(QPixmap::fromImage(img)) );
- }
- //Now adjust the visible text as necessary based on font/grid sizing
- button->setToolTip(txt);
- //Double check that the visual icon size matches the requested size - otherwise upscale the icon
- if(button->fontMetrics().width(txt) > (button->width()-OUTMARGIN) ){
- //Text too long, try to show it on two lines
- //txt = button->fontMetrics().elidedText(txt, Qt::ElideRight, 2*(button->width()-OUTMARGIN), Qt::TextWordWrap);
- txt =txt.section(" ",0,2).replace(" ","\n"); //First take care of any natural breaks
- //Go through and combine any lines
- if(txt.contains("\n")){
- //need to check each line
- QStringList txtL = txt.split("\n");
- for(int i=0; i<txtL.length(); i++){
- if(( i+1<txtL.length()) && (button->fontMetrics().width(txtL[i]) < button->width()/2) ){
- txtL[i] = txtL[i]+" "+txtL[i+1];
- txtL.removeAt(i+1);
- }
- }
- txt = txtL.join("\n").section("\n",0,2);
- }
-
- if(txt.contains("\n")){
- //need to check each line
- QStringList txtL = txt.split("\n");
- for(int i=0; i<txtL.length(); i++){
- if(i>1){ txtL.removeAt(i); i--; } //Only take the first two lines
- else{ txtL[i] = button->fontMetrics().elidedText(txtL[i], Qt::ElideRight, (button->width()-OUTMARGIN) ); }
- }
- txt = txtL.join("\n");
- }else{
- txt = this->fontMetrics().elidedText(txt,Qt::ElideRight, 2*(button->width()-OUTMARGIN));
- //Now split the line in half for the two lines
- txt.insert( ((txt.count())/2), "\n");
- }
- }
- if(!txt.contains("\n")){ txt.append("\n "); } //always use two lines
- //qDebug() << " - Setting Button Text:" << txt;
- button->setText(txt);
-
- QTimer::singleShot(100, this, SLOT(update()) ); //Make sure to re-draw the image in a moment
-}
-
-void AppLauncherPlugin::buttonClicked(){
- QString path = button->whatsThis();
- if(path.isEmpty() || !QFile::exists(path) ){
- //prompt for the user to select an application
- QList<XDGDesktop*> apps = LSession::handle()->applicationMenu()->currentAppHash()->value("All"); //LXDG::sortDesktopNames( LXDG::systemDesktopFiles() );
- QStringList names;
- for(int i=0; i<apps.length(); i++){ names << apps[i]->name; }
- bool ok = false;
- QString app = QInputDialog::getItem(this, tr("Select Application"), tr("Name:"), names, 0, false, &ok);
- if(!ok || names.indexOf(app)<0){ return; } //cancelled
- this->saveSetting("applicationpath", apps[ names.indexOf(app) ]->filePath);
- QTimer::singleShot(0,this, SLOT(loadButton()));
- }else{
- LSession::LaunchApplication("lumina-open \""+path+"\"");
- }
-
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/applauncher/AppLauncherPlugin.h b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/applauncher/AppLauncherPlugin.h
deleted file mode 100644
index a0f6a7cd..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/applauncher/AppLauncherPlugin.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This class is a quick sample desktop plugin
-//===========================================
-#ifndef _LUMINA_DESKTOP_DESKTOP_PLUGIN_APPLICATION_LAUNCHER_H
-#define _LUMINA_DESKTOP_DESKTOP_PLUGIN_APPLICATION_LAUNCHER_H
-
-#include <QToolButton>
-#include <QInputDialog>
-#include <QVBoxLayout>
-#include <QProcess>
-#include <QFile>
-#include <QFileSystemWatcher>
-#include <QTimer>
-#include <QMenu>
-#include <QCursor>
-
-#include "../LDPlugin.h"
-
-#include <LuminaXDG.h>
-
-class AppLauncherPlugin : public LDPlugin{
- Q_OBJECT
-public:
- AppLauncherPlugin(QWidget* parent, QString ID);
- ~AppLauncherPlugin(){}
-
- void Cleanup(); //special function for final cleanup
-
-private:
- QToolButton *button;
- QFileSystemWatcher *watcher;
- //QMenu *menu;
-
-private slots:
- void loadButton();
- void buttonClicked();
- //void openContextMenu();
-
- //void increaseIconSize();
- //void decreaseIconSize();
- //void deleteFile();
-
-public slots:
- void LocaleChange(){
- loadButton(); //force reload
- }
-
-protected:
- void resizeEvent(QResizeEvent *ev){
- LDPlugin::resizeEvent(ev);
- QTimer::singleShot(100, this, SLOT(loadButton()) );
- }
-};
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/applauncher/OutlineToolButton.h b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/applauncher/OutlineToolButton.h
deleted file mode 100644
index 24410e75..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/applauncher/OutlineToolButton.h
+++ /dev/null
@@ -1,99 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This is a simple subclass for a QToolButton with black/white text (for transparent backgrounds)
-//===========================================
-#ifndef _LUMINA_DESKTOP_PLUGIN_APPLAUNCHER_OUTLINE_TOOLBUTTON_H
-#define _LUMINA_DESKTOP_PLUGIN_APPLAUNCHER_OUTLINE_TOOLBUTTON_H
-
-#include <QToolButton>
-#include <QPainter>
-#include <QPainterPath>
-#include <QPen>
-#include <QStyle>
-#include <QStyleOption>
-#include <QStylePainter>
-#include <QFont>
-#include <QDebug>
-#include <QMouseEvent>
-
-
-class OutlineToolButton : public QToolButton{
- Q_OBJECT
-public:
- OutlineToolButton(QWidget *parent=0) : QToolButton(parent){
- //This button needs slightly different font settings - do this in the constructor so that other widgets can take it into account.
- QFont font = this->font();
- font.setStyleStrategy(QFont::PreferAntialias); //Always set the font strategy (just in case it starts working down the road)
- this->setFont(font);
- this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
- }
- ~OutlineToolButton(){}
-
-signals:
- void DoubleClicked();
-
-protected:
- void mouseDoubleClickEvent(QMouseEvent *ev){
- ev->accept();
- emit DoubleClicked();
- }
- void mousePressEvent(QMouseEvent *ev){
- ev->ignore();
- }
- void mouseReleaseEvent(QMouseEvent *ev){
- ev->ignore();
- }
-
- void paintEvent(QPaintEvent*){
- /* NOTE: This is what a standard QToolButton performs (peeked at Qt source code for this tidbit)
- QStylePainter p(this);
- QStyleOptionToolButton opt;
- initStyleOption(&opt);
- p.drawComplexControl(QStyle::CC_ToolButton, opt);
- */
-
- //Modify the standard QToolButton routine to paint the text differently
- QStylePainter p(this);
- QStyleOptionToolButton opt;
- initStyleOption(&opt);
- opt.font = this->property("font").value<QFont>(); //This ensures that the stylesheet values are incorporated
- opt.font.setStyleStrategy(QFont::PreferAntialias); //Always set the font strategy (just in case it starts working down the road)
- opt.font.setKerning(true);
- opt.fontMetrics = QFontMetrics(opt.font);
- opt.text.clear(); //Don't paint the text yet - just the background/icon
- p.drawComplexControl(QStyle::CC_ToolButton, opt); //This does all the normal QToolButton stuff - just not text
- //Now get the text rectangle for the widget
- QRect box = p.style()->itemTextRect(opt.fontMetrics, opt.rect, Qt::AlignHCenter | Qt::AlignBottom, true, this->text());
- //Get the QColors for the outline/text
- QColor textC = opt.palette.text().color().toHsl(); //need the lightness value in a moment
- QColor outC = textC;
- //qDebug() << "Font Color Values:" << textC << textC.lightness() << textC.lightnessF();
- if(textC.lightnessF() > 0.5){ outC.setHsl(textC.hue(), textC.hslSaturation(), 0, 90); }
- else{outC.setHsl(textC.hue(), textC.hslSaturation(), 255, 50); }
- //qDebug() << "Outline Color Values:" << outC;
- //Now get the size of the outline border (need to scale for high-res monitors)
- qreal OWidth = opt.fontMetrics.width("o")/2.0;
- //qDebug() << "Outline Width:" << OWidth;
- //Now generate a QPainterPath for the text
- QPainterPath path;
- QStringList txt = this->text().split("\n"); //need each line independently, the newline actually gets painted otherwise
- for(int i=0; i<txt.length(); i++){
- path.addText(box.center().x() - (opt.fontMetrics.width(txt[i])/2), box.y()+((i+1)*(box.height()/txt.length()))-opt.fontMetrics.descent(), opt.font, txt[i] );
- }
- path.setFillRule(Qt::WindingFill);
- //Now paint the text
- QRadialGradient RG(box.center(), box.width()*1.5); //width is always going to be greater than height
- RG.setColorAt(0, outC);
- RG.setColorAt(1, Qt::transparent);
- p.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing); //need antialiasing for this to work well (sub-pixel painting)
- p.strokePath(path, QPen(QBrush(RG),OWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin) ); //This will be the outline - 1pixel thick, semi-transparent
- p.fillPath(path, QBrush(textC)); //this will be the inside/text color
-
- }
-
-};
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/audioplayer/PlayerWidget.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/audioplayer/PlayerWidget.cpp
deleted file mode 100644
index 722a5865..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/audioplayer/PlayerWidget.cpp
+++ /dev/null
@@ -1,271 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "PlayerWidget.h"
-#include "ui_PlayerWidget.h"
-
-#include <QDir>
-#include <QUrl>
-#include <QInputDialog>
-#include <QFileDialog>
-#include <LuminaXDG.h>
-#include <QDebug>
-#include <QDesktopWidget>
-
-PlayerWidget::PlayerWidget(QWidget *parent) : QWidget(parent), ui(new Ui::PlayerWidget()){
- ui->setupUi(this); //load the designer form
- PLAYER = new QMediaPlayer(this);
- PLAYER->setVolume(100);
- PLAYER->setNotifyInterval(1000); //1 second interval (just needs to be a rough estimate)
- PLAYLIST = new QMediaPlaylist(this);
- PLAYLIST->setPlaybackMode(QMediaPlaylist::Sequential);
- PLAYER->setPlaylist(PLAYLIST);
-
- configMenu = new QMenu(this);
- ui->tool_config->setMenu(configMenu);
- addMenu = new QMenu(this);
- ui->tool_add->setMenu(addMenu);
-
- updatinglists = false; //start off as false
-
- ui->combo_playlist->setContextMenuPolicy(Qt::NoContextMenu);
-
- LoadIcons();
- playerStateChanged(); //update button visibility
- currentSongChanged();
- //Connect all the signals/slots
- //connect(infoTimer, SIGNAL(timeout()), this, SLOT(rotateTrackInfo()) );
- connect(PLAYER, SIGNAL(positionChanged(qint64)),this, SLOT(updateProgress(qint64)) );
- connect(PLAYER, SIGNAL(durationChanged(qint64)), this, SLOT(updateMaxProgress(qint64)) );
- connect(PLAYLIST, SIGNAL(mediaChanged(int, int)), this, SLOT(playlistChanged()) );
- connect(PLAYER, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(playerStateChanged()) );
- connect(PLAYLIST, SIGNAL(currentMediaChanged(const QMediaContent&)), this, SLOT(currentSongChanged()) );
- connect(ui->combo_playlist, SIGNAL(currentIndexChanged(int)), this, SLOT(userlistSelectionChanged()) );
- connect(ui->tool_play, SIGNAL(clicked()), this, SLOT(playClicked()) );
- connect(ui->tool_pause, SIGNAL(clicked()), this, SLOT(pauseClicked()) );
- connect(ui->tool_stop, SIGNAL(clicked()), this, SLOT(stopClicked()) );
- connect(ui->tool_next, SIGNAL(clicked()), this, SLOT(nextClicked()) );
- connect(ui->tool_prev, SIGNAL(clicked()), this, SLOT(prevClicked()) );
-
-}
-
-PlayerWidget::~PlayerWidget(){
- //qDebug() << "Removing PlayerWidget";
-}
-
-void PlayerWidget::LoadIcons(){
- ui->tool_stop->setIcon( LXDG::findIcon("media-playback-stop","") );
- ui->tool_play->setIcon( LXDG::findIcon("media-playback-start","") );
- ui->tool_pause->setIcon( LXDG::findIcon("media-playback-pause","") );
- ui->tool_next->setIcon( LXDG::findIcon("media-skip-forward","") );
- ui->tool_prev->setIcon( LXDG::findIcon("media-skip-backward","") );
- ui->tool_add->setIcon( LXDG::findIcon("list-add","") );
- ui->tool_config->setIcon( LXDG::findIcon("configure","") );
- //Now re-assemble the menus as well
- configMenu->clear();
- configMenu->addAction(LXDG::findIcon("media-eject",""), tr("Clear Playlist"), this, SLOT(ClearPlaylist()));
- configMenu->addAction(LXDG::findIcon("roll",""), tr("Shuffle Playlist"), this, SLOT(ShufflePlaylist()));
- addMenu->clear();
- addMenu->addAction(LXDG::findIcon("document-new",""), tr("Add Files"), this, SLOT(AddFilesToPlaylist()));
- addMenu->addAction(LXDG::findIcon("folder-new",""), tr("Add Directory"), this, SLOT(AddDirToPlaylist()));
- addMenu->addAction(LXDG::findIcon("download",""), tr("Add URL"), this, SLOT(AddURLToPlaylist()));
-}
-
-void PlayerWidget::playClicked(){
- PLAYER->play();
-}
-
-void PlayerWidget::pauseClicked(){
- PLAYER->pause();
-}
-
-void PlayerWidget::stopClicked(){
- PLAYER->stop();
-}
-
-void PlayerWidget::nextClicked(){
- PLAYLIST->next();
-}
-
-void PlayerWidget::prevClicked(){
- PLAYLIST->previous();
-}
-
-void PlayerWidget::AddFilesToPlaylist(){
- //Prompt the user to select multimedia files
- QFileDialog dlg(0, Qt::Dialog | Qt::WindowStaysOnTopHint );
- dlg.setFileMode(QFileDialog::ExistingFiles);
- dlg.setAcceptMode(QFileDialog::AcceptOpen);
- dlg.setNameFilter( tr("Multimedia Files")+" ("+LXDG::findAVFileExtensions().join(" ")+")");
- dlg.setWindowTitle(tr("Select Multimedia Files"));
- dlg.setWindowIcon( LXDG::findIcon("file-open","") );
- dlg.setDirectory(QDir::homePath()); //start in the home directory
- //ensure it is centered on the current screen
- QPoint center = QApplication::desktop()->screenGeometry(this).center();
- dlg.move( center.x()-(dlg.width()/2), center.y()-(dlg.height()/2) );
- dlg.show();
- while( dlg.isVisible() ){
- QApplication::processEvents();
- }
- QList<QUrl> files = dlg.selectedUrls();
- if(files.isEmpty() || dlg.result()!=QDialog::Accepted){ return; } //cancelled
- //Make this use show/processEvents later
- //QList<QUrl> files = QFileDialog::getOpenFileUrls(0, tr("Select Multimedia Files"), QDir::homePath(), "Multimedia Files ("+LXDG::findAVFileExtensions().join(" ")+")");
- QList<QMediaContent> urls;
- for(int i=0; i<files.length(); i++){
- urls << QMediaContent(files[i]);
- }
- PLAYLIST->addMedia(urls);
- playlistChanged();
-}
-
-void PlayerWidget::AddDirToPlaylist(){
- QFileDialog dlg(0, Qt::Dialog | Qt::WindowStaysOnTopHint );
- dlg.setFileMode(QFileDialog::Directory);
- dlg.setOption(QFileDialog::ShowDirsOnly, true);
- dlg.setAcceptMode(QFileDialog::AcceptOpen);
- dlg.setWindowTitle(tr("Select Multimedia Directory"));
- dlg.setWindowIcon( LXDG::findIcon("folder-open","") );
- dlg.setDirectory(QDir::homePath()); //start in the home directory
- //ensure it is centered on the current screen
- QPoint center = QApplication::desktop()->screenGeometry(this).center();
- dlg.move( center.x()-(dlg.width()/2), center.y()-(dlg.height()/2) );
- dlg.show();
- while( dlg.isVisible() ){
- QApplication::processEvents();
- }
- if(dlg.result() != QDialog::Accepted){ return; } //cancelled
- QStringList sel = dlg.selectedFiles();
- if(sel.isEmpty()){ return; } //cancelled
- QString dirpath = sel.first(); //QFileDialog::getExistingDirectory(0, tr("Select a Multimedia Directory"), QDir::homePath() );
- if(dirpath.isEmpty()){ return; } //cancelled
- QDir dir(dirpath);
- QFileInfoList files = dir.entryInfoList(LXDG::findAVFileExtensions(), QDir::Files | QDir::NoDotAndDotDot, QDir::Name);
- if(files.isEmpty()){ return; } //nothing in this directory
- QList<QMediaContent> urls;
- for(int i=0; i<files.length(); i++){
- urls << QMediaContent(QUrl::fromLocalFile(files[i].absoluteFilePath()) );
- }
- PLAYLIST->addMedia(urls);
- playlistChanged();
-}
-
-void PlayerWidget::AddURLToPlaylist(){
- QInputDialog dlg(0, Qt::Dialog | Qt::WindowStaysOnTopHint );
- dlg.setInputMode(QInputDialog::TextInput);
- dlg.setLabelText(tr("Enter a valid URL for a multimedia file or stream:"));
- dlg.setTextEchoMode(QLineEdit::Normal);
- dlg.setWindowTitle(tr("Multimedia URL"));
- dlg.setWindowIcon( LXDG::findIcon("download","") );
- //ensure it is centered on the current screen
- QPoint center = QApplication::desktop()->screenGeometry(this).center();
- dlg.move( center.x()-(dlg.width()/2), center.y()-(dlg.height()/2) );
- dlg.show();
- while( dlg.isVisible() ){
- QApplication::processEvents();
- }
- QString url = dlg.textValue();
- if(url.isEmpty() || dlg.result()!=QDialog::Accepted){ return; } //cancelled
-
- //QString url = QInputDialog::getText(0, tr("Multimedia URL"), tr("Enter a valid URL for a multimedia file or stream"), QLineEdit::Normal);
- //if(url.isEmpty()){ return; }
- QUrl newurl(url);
- if(!newurl.isValid()){ return; } //invalid URL
- PLAYLIST->addMedia(newurl);
- playlistChanged();
-}
-
-void PlayerWidget::ClearPlaylist(){
- PLAYER->stop();
- PLAYLIST->clear();
- playlistChanged();
-}
-
-void PlayerWidget::ShufflePlaylist(){
- PLAYLIST->shuffle();
-}
-
-
-void PlayerWidget::userlistSelectionChanged(){ //front-end combobox was changed by the user
- if(updatinglists){ return; }
- PLAYLIST->setCurrentIndex( ui->combo_playlist->currentIndex() );
-}
-
-void PlayerWidget::playerStateChanged(){
- switch( PLAYER->state() ){
- case QMediaPlayer::StoppedState:
- ui->tool_stop->setVisible(false);
- ui->tool_play->setVisible(true);
- ui->tool_pause->setVisible(false);
- ui->progressBar->setVisible(false);
- break;
- case QMediaPlayer::PausedState:
- ui->tool_stop->setVisible(true);
- ui->tool_play->setVisible(true);
- ui->tool_pause->setVisible(false);
- ui->progressBar->setVisible(true);
- break;
- case QMediaPlayer::PlayingState:
- ui->tool_stop->setVisible(true);
- ui->tool_play->setVisible(false);
- ui->tool_pause->setVisible(true);
- ui->progressBar->setVisible(true);
- break;
- }
-
-}
-
-void PlayerWidget::playlistChanged(){
- updatinglists = true;
- ui->combo_playlist->clear();
- for(int i=0; i<PLAYLIST->mediaCount(); i++){
- QUrl url = PLAYLIST->media(i).canonicalUrl();
- if(url.isLocalFile()){
- ui->combo_playlist->addItem(LXDG::findMimeIcon(url.fileName().section(".",-1)), url.fileName() );
- }else{
- ui->combo_playlist->addItem(LXDG::findIcon("download",""), url.toString() );
- }
- }
- if(PLAYLIST->currentIndex()<0 && PLAYLIST->mediaCount()>0){ PLAYLIST->setCurrentIndex(0); }
- ui->combo_playlist->setCurrentIndex(PLAYLIST->currentIndex());
-
- updatinglists = false;
-}
-
-void PlayerWidget::currentSongChanged(){
- if(PLAYLIST->currentIndex() != ui->combo_playlist->currentIndex()){
- updatinglists = true;
- ui->combo_playlist->setCurrentIndex(PLAYLIST->currentIndex());
- updatinglists = false;
- }
- ui->tool_next->setEnabled( PLAYLIST->nextIndex() >= 0 );
- ui->tool_prev->setEnabled( PLAYLIST->previousIndex() >= 0);
- ui->label_num->setText( QString::number( PLAYLIST->currentIndex()+1)+"/"+QString::number(PLAYLIST->mediaCount()) );
- ui->progressBar->setRange(0, PLAYER->duration() );
- ui->progressBar->setValue(0);
-}
-
-void PlayerWidget::updateProgress(qint64 val){
- //qDebug() << "Update Progress Bar:" << val;
- ui->progressBar->setValue(val);
-}
-
-void PlayerWidget::updateMaxProgress(qint64 val){
- ui->progressBar->setRange(0,val);
-}
-
-
-AudioPlayerPlugin::AudioPlayerPlugin(QWidget *parent, QString ID) : LDPlugin(parent, ID){
- player = new PlayerWidget(this);
- this->setLayout( new QVBoxLayout() );
- this->layout()->setContentsMargins(0,0,0,0);
- this->layout()->addWidget(player);
-
-}
-
-AudioPlayerPlugin::~AudioPlayerPlugin(){
- //qDebug() << "Remove AudioPlayerPlugin";
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/audioplayer/PlayerWidget.h b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/audioplayer/PlayerWidget.h
deleted file mode 100644
index 6aaeac4c..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/audioplayer/PlayerWidget.h
+++ /dev/null
@@ -1,84 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This plugin is a simple audio player on the desktop
-//===========================================
-#ifndef _LUMINA_DESKTOP_PLUGIN_AUDIO_PLAYER_WIDGET_H
-#define _LUMINA_DESKTOP_PLUGIN_AUDIO_PLAYER_WIDGET_H
-
-#include <QMediaPlaylist>
-#include <QMediaPlayer>
-#include <QTimer>
-#include <QWidget>
-#include <QMenu>
-
-#include "../LDPlugin.h"
-
-namespace Ui{
- class PlayerWidget;
-};
-
-class PlayerWidget : public QWidget{
- Q_OBJECT
-public:
- PlayerWidget(QWidget *parent = 0);
- ~PlayerWidget();
-
-public slots:
- void LoadIcons();
-
-private:
- Ui::PlayerWidget *ui;
- QMediaPlaylist *PLAYLIST;
- QMediaPlayer *PLAYER;
- QMenu *configMenu, *addMenu;
- bool updatinglists;
-
-private slots:
- void playClicked();
- void pauseClicked();
- void stopClicked();
- void nextClicked();
- void prevClicked();
-
- void AddFilesToPlaylist();
- void AddDirToPlaylist();
- void AddURLToPlaylist();
- void ClearPlaylist();
- void ShufflePlaylist();
- void userlistSelectionChanged(); //front-end combobox was changed by the user
- void playerStateChanged();
- void playlistChanged(); //list of items changed
- void currentSongChanged();
- void updateProgress(qint64 val);
- void updateMaxProgress(qint64 val);
-};
-
-// Wrapper class to put this into a desktop plugin container
-class AudioPlayerPlugin : public LDPlugin{
- Q_OBJECT
-public:
- AudioPlayerPlugin(QWidget* parent, QString ID);
- ~AudioPlayerPlugin();
-
- virtual QSize defaultPluginSize(){
- // The returned QSize is in grid points (typically 100 or 200 pixels square)
- return QSize(3,1);
- }
-
-private:
- PlayerWidget *player;
-
-public slots:
- void LocaleChange(){
- QTimer::singleShot(0,player, SLOT(LoadIcons()));
- }
- void ThemeChange(){
- QTimer::singleShot(0,player, SLOT(LoadIcons()));
- }
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/audioplayer/PlayerWidget.ui b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/audioplayer/PlayerWidget.ui
deleted file mode 100644
index b1e7ee59..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/audioplayer/PlayerWidget.ui
+++ /dev/null
@@ -1,182 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>PlayerWidget</class>
- <widget class="QWidget" name="PlayerWidget">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>346</width>
- <height>81</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Form</string>
- </property>
- <property name="styleSheet">
- <string notr="true">QToolButton::menu-indicator{ image: none; }</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="spacing">
- <number>4</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="QToolButton" name="tool_config">
- <property name="text">
- <string notr="true">Config</string>
- </property>
- <property name="popupMode">
- <enum>QToolButton::InstantPopup</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_add">
- <property name="text">
- <string notr="true">Add</string>
- </property>
- <property name="popupMode">
- <enum>QToolButton::InstantPopup</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QToolButton" name="tool_prev">
- <property name="text">
- <string notr="true">prev</string>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_num">
- <property name="text">
- <string notr="true">1/10</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_next">
- <property name="text">
- <string notr="true">next</string>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QComboBox" name="combo_playlist"/>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QToolButton" name="tool_play">
- <property name="text">
- <string notr="true">Play</string>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_pause">
- <property name="text">
- <string notr="true">Pause</string>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_stop">
- <property name="text">
- <string notr="true">Stop</string>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QProgressBar" name="progressBar">
- <property name="value">
- <number>24</number>
- </property>
- <property name="textVisible">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>0</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/calendar/CalendarPlugin.h b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/calendar/CalendarPlugin.h
deleted file mode 100644
index abb138f7..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/calendar/CalendarPlugin.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This class is a quick sample desktop plugin
-//===========================================
-#ifndef _LUMINA_DESKTOP_DESKTOP_PLUGIN_CALENDAR_H
-#define _LUMINA_DESKTOP_DESKTOP_PLUGIN_CALENDAR_H
-
-#include <QCalendarWidget>
-#include <QVBoxLayout>
-#include <QDate>
-#include <QTimer>
-#include "../LDPlugin.h"
-
-class CalendarPlugin : public LDPlugin{
- Q_OBJECT
-private:
- QCalendarWidget *cal;
- QTimer *timer;
-
-public:
- CalendarPlugin(QWidget* parent, QString ID) : LDPlugin(parent, ID){
- this->setLayout( new QVBoxLayout());
- this->layout()->setContentsMargins(0,0,0,0);
- cal = new QCalendarWidget(this);
- cal->setSelectionMode(QCalendarWidget::NoSelection);
- this->layout()->addWidget(cal);
- timer = new QTimer(this);
- timer->setInterval(1800000); //30 minute refresh timer
- timer->start();
- connect(timer, SIGNAL(timeout()), this, SLOT(updateDate()) );
- QTimer::singleShot(0,this, SLOT(updateDate()) );
- connect(this, SIGNAL(PluginResized()), this, SLOT(UpdateCalendarSize()));
- }
-
- ~CalendarPlugin(){ timer->stop(); }
-
- virtual QSize defaultPluginSize(){
- // The returned QSize is in grid points (typically 100 or 200 pixels square)
- return QSize(3,2);
- }
-
-private slots:
- void updateDate(){
- if(cal->selectedDate() != QDate::currentDate()){
- cal->setSelectedDate(QDate::currentDate());
- cal->showSelectedDate();
- }
- }
- void UpdateCalendarSize(){
- cal->setFixedSize(this->size());
- }
-
-
-};
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/desktop-plugins.pri b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/desktop-plugins.pri
deleted file mode 100644
index 8376316a..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/desktop-plugins.pri
+++ /dev/null
@@ -1,24 +0,0 @@
-SOURCES += $$PWD/applauncher/AppLauncherPlugin.cpp \
- $$PWD/desktopview/DesktopViewPlugin.cpp \
- $$PWD/notepad/NotepadPlugin.cpp \
- $$PWD/audioplayer/PlayerWidget.cpp \
- $$PWD/systemmonitor/MonitorWidget.cpp \
- $$PWD/rssreader/RSSFeedPlugin.cpp \
- $$PWD/rssreader/RSSObjects.cpp
-# $$PWD/messagecenter/MessageCenter.cpp
-
-HEADERS += $$PWD/calendar/CalendarPlugin.h \
- $$PWD/applauncher/AppLauncherPlugin.h \
- $$PWD/applauncher/OutlineToolButton.h \
- $$PWD/desktopview/DesktopViewPlugin.h \
- $$PWD/notepad/NotepadPlugin.h \
- $$PWD/audioplayer/PlayerWidget.h \
- $$PWD/systemmonitor/MonitorWidget.h \
- $$PWD/rssreader/RSSFeedPlugin.h \
- $$PWD/rssreader/RSSObjects.h
-# $$PWD/quickcontainer/QuickDPlugin.h
-# $$PWD/messagecenter/MessageCenter.h
-
-FORMS += $$PWD/audioplayer/PlayerWidget.ui \
- $$PWD/systemmonitor/MonitorWidget.ui \
- $$PWD/rssreader/RSSFeedPlugin.ui
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/desktopview/DesktopViewPlugin.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/desktopview/DesktopViewPlugin.cpp
deleted file mode 100644
index 90f3374b..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/desktopview/DesktopViewPlugin.cpp
+++ /dev/null
@@ -1,214 +0,0 @@
-#include "DesktopViewPlugin.h"
-
-#include <QFileInfo>
-#include <QDir>
-#include <QClipboard>
-#include <QMimeData>
-#include <QImageReader>
-
-#include <LuminaXDG.h>
-#include "LSession.h"
-
-
-DesktopViewPlugin::DesktopViewPlugin(QWidget* parent, QString ID) : LDPlugin(parent, ID){
- this->setLayout( new QVBoxLayout());
- this->layout()->setContentsMargins(0,0,0,0);
-
- list = new QListWidget(this);
- list->setViewMode(QListView::IconMode);
- list->setFlow(QListWidget::TopToBottom); //Qt bug workaround - need the opposite flow in the widget constructor
- list->setWrapping(true);
- list->setSpacing(4);
- list->setSelectionBehavior(QAbstractItemView::SelectItems);
- list->setSelectionMode(QAbstractItemView::ExtendedSelection);
- list->setContextMenuPolicy(Qt::CustomContextMenu);
- list->setMovement(QListView::Snap); //make sure items are "stuck" in the grid
-
- menu = new QMenu(this);
- menu->addAction( LXDG::findIcon("run-build-file",""), tr("Open"), this, SLOT(runItems()) );
- menu->addSeparator();
- menu->addAction( LXDG::findIcon("edit-cut",""), tr("Cut"), this, SLOT(cutItems()) );
- menu->addAction( LXDG::findIcon("edit-copy",""), tr("Copy"), this, SLOT(copyItems()) );
- menu->addSeparator();
- menu->addAction( LXDG::findIcon("zoom-in",""), tr("Increase Icons"), this, SLOT(increaseIconSize()) );
- menu->addAction( LXDG::findIcon("zoom-out",""), tr("Decrease Icons"), this, SLOT(decreaseIconSize()) );
- menu->addSeparator();
- menu->addAction( LXDG::findIcon("edit-delete",""), tr("Delete"), this, SLOT(deleteItems()) );
- menu->addSeparator();
- if(LUtils::isValidBinary("lumina-fileinfo")){
- menu->addAction( LXDG::findIcon("system-search",""), tr("Properties"), this, SLOT(displayProperties()) );
- }
- this->layout()->addWidget(list);
-
- connect(QApplication::instance(), SIGNAL(DesktopFilesChanged()), this, SLOT(updateContents()) );
- connect(list, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(runItems()) );
- connect(list, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showMenu(const QPoint&)) );
- QTimer::singleShot(1000,this, SLOT(updateContents()) ); //wait a second before loading contents
-}
-
-DesktopViewPlugin::~DesktopViewPlugin(){
-
-}
-
-void DesktopViewPlugin::runItems(){
- QList<QListWidgetItem*> sel = list->selectedItems();
- for(int i=0; i<sel.length(); i++){
- LSession::LaunchApplication("lumina-open \""+sel[i]->whatsThis()+"\"");
- }
-}
-
-void DesktopViewPlugin::copyItems(){
- QList<QListWidgetItem*> sel = list->selectedItems();
- if(sel.isEmpty()){ return; } //nothing selected
- QStringList items;
- //Format the data string
- for(int i=0; i<sel.length(); i++){
- items << "copy::::"+sel[i]->whatsThis();
- }
- //Now save that data to the global clipboard
- QMimeData *dat = new QMimeData;
- dat->clear();
- dat->setData("x-special/lumina-copied-files", items.join("\n").toLocal8Bit());
- QApplication::clipboard()->clear();
- QApplication::clipboard()->setMimeData(dat);
-}
-
-void DesktopViewPlugin::cutItems(){
- QList<QListWidgetItem*> sel = list->selectedItems();
- if(sel.isEmpty()){ return; } //nothing selected
- QStringList items;
- //Format the data string
- for(int i=0; i<sel.length(); i++){
- items << "cut::::"+sel[i]->whatsThis();
- }
- //Now save that data to the global clipboard
- QMimeData *dat = new QMimeData;
- dat->clear();
- dat->setData("x-special/lumina-copied-files", items.join("\n").toLocal8Bit());
- QApplication::clipboard()->clear();
- QApplication::clipboard()->setMimeData(dat);
-}
-
-void DesktopViewPlugin::deleteItems(){
- QList<QListWidgetItem*> sel = list->selectedItems();
- for(int i=0; i<sel.length(); i++){
- if(QFileInfo(sel[i]->whatsThis()).isDir()){
- QProcess::startDetached("rm -r \""+sel[i]->whatsThis()+"\"");
- }else{
- QFile::remove(sel[i]->whatsThis());
- }
- }
-}
-
-void DesktopViewPlugin::showMenu(const QPoint &pos){
- //Make sure there is an item underneath the mouse first
- if(list->itemAt(pos)!=0){
- menu->popup(this->mapToGlobal(pos));
- }else{
- //Pass the context menu request on to the desktop (emit it from the plugin)
- this->showPluginMenu();
- //emit OpenDesktopMenu();
- }
-}
-
-void DesktopViewPlugin::increaseIconSize(){
- int icosize = this->readSetting("IconSize",64).toInt();
- icosize+=16; //go in orders of 16 pixels
- //list->setIconSize(QSize(icosize,icosize));
- this->saveSetting("IconSize",icosize);
- QTimer::singleShot(10, this, SLOT(updateContents()));
-}
-
-void DesktopViewPlugin::decreaseIconSize(){
- int icosize = this->readSetting("IconSize",64).toInt();
- if(icosize < 20){ return; } //too small to decrease more
- icosize-=16; //go in orders of 16 pixels
- //list->setIconSize(QSize(icosize,icosize));
- this->saveSetting("IconSize",icosize);
- QTimer::singleShot(10,this, SLOT(updateContents()));
-}
-
-void DesktopViewPlugin::updateContents(){
- list->clear();
-
- int icosize = this->readSetting("IconSize",64).toInt();
- QSize gridSZ = QSize(qRound(1.8*icosize),icosize+4+(2*this->fontMetrics().height()) );
- //qDebug() << "Icon Size:" << icosize <<"Grid Size:" << gridSZ.width() << gridSZ.height();
- list->setGridSize(gridSZ);
- list->setIconSize(QSize(icosize,icosize));
- QDir dir(QDir::homePath()+"/Desktop");
- QFileInfoList files = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name | QDir::Type | QDir::DirsFirst);
- for(int i=0; i<files.length(); i++){
- QListWidgetItem *it = new QListWidgetItem;
- it->setSizeHint(gridSZ); //ensure uniform item sizes
- //it->setForeground(QBrush(Qt::black, Qt::Dense2Pattern)); //Try to use a font color which will always be visible
- it->setTextAlignment(Qt::AlignCenter);
- it->setWhatsThis(files[i].absoluteFilePath());
- QString txt;
- if(files[i].isDir()){
- it->setIcon( LXDG::findIcon("folder","") );
- txt = files[i].fileName();
- }else if(files[i].suffix() == "desktop" ){
- XDGDesktop desk(files[i].absoluteFilePath());
- if(desk.isValid()){
- it->setIcon( LXDG::findIcon(desk.icon,"unknown") );
- if(desk.name.isEmpty()){
- txt = files[i].fileName();
- }else{
- txt = desk.name;
- }
- }else{
- //Revert back to a standard file handling
- it->setIcon( LXDG::findMimeIcon(files[i].fileName()) );
- txt = files[i].fileName();
- }
- }else if(LUtils::imageExtensions().contains(files[i].suffix().toLower()) ){
- it->setIcon( QIcon( QPixmap(files[i].absoluteFilePath()).scaled(icosize,icosize,Qt::IgnoreAspectRatio, Qt::SmoothTransformation) ) );
- txt = files[i].fileName();
- }else{
- it->setIcon( LXDG::findMimeIcon( files[i].fileName() ) );
- txt = files[i].fileName();
- }
- //Add the sym-link overlay to the icon as necessary
- if(files[i].isSymLink()){
- QImage img = it->icon().pixmap(QSize(icosize,icosize)).toImage();
- int oSize = icosize/2; //overlay size
- QPixmap overlay = LXDG::findIcon("emblem-symbolic-link").pixmap(oSize,oSize).scaled(oSize,oSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
- QPainter painter(&img);
- painter.drawPixmap(icosize-oSize,icosize-oSize,overlay); //put it in the bottom-right corner
- it->setIcon( QIcon(QPixmap::fromImage(img)) );
- }
- //Now adjust the visible text as necessary based on font/grid sizing
- it->setToolTip(txt);
- if(this->fontMetrics().width(txt) > (gridSZ.width()-4) ){
- //int dash = this->fontMetrics().width("-");
- //Text too long, try to show it on two lines
- txt = txt.section(" ",0,2).replace(" ","\n"); //First take care of any natural breaks
- if(txt.contains("\n")){
- //need to check each line
- QStringList txtL = txt.split("\n");
- for(int i=0; i<txtL.length(); i++){ txtL[i] = this->fontMetrics().elidedText(txtL[i], Qt::ElideRight, gridSZ.width()-4); }
- txt = txtL.join("\n");
- if(txtL.length()>2){ txt = txt.section("\n",0,1); } //only keep the first two lines
- }else{
- txt = this->fontMetrics().elidedText(txt,Qt::ElideRight, 2*(gridSZ.width()-4));
- //Now split the line in half for the two lines
- txt.insert( (txt.count()/2), "\n");
- }
- }else{
- txt.append("\n "); //ensure two lines (2nd one invisible) - keeps formatting sane
- }
- it->setText(txt);
- list->addItem(it);
- if( (i%10) == 0){ QApplication::processEvents(); }//keep the UI snappy, every 10 items
- }
- list->setFlow(QListWidget::TopToBottom); //To ensure this is consistent - issues with putting it in the constructor
- list->update(); //Re-paint the widget after all items are added
-}
-
-void DesktopViewPlugin::displayProperties(){
- QList<QListWidgetItem*> sel = list->selectedItems();
- for(int i=0; i<sel.length(); i++){
- LSession::LaunchApplication("lumina-fileinfo \""+sel[i]->whatsThis());
- }
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/desktopview/DesktopViewPlugin.h b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/desktopview/DesktopViewPlugin.h
deleted file mode 100644
index 046b6e5c..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/desktopview/DesktopViewPlugin.h
+++ /dev/null
@@ -1,55 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This plugin is a listing/launcher for things in the ~/Desktop folder
-//===========================================
-#ifndef _LUMINA_DESKTOP_DESKTOP_VIEW_PLUGIN_H
-#define _LUMINA_DESKTOP_DESKTOP_VIEW_PLUGIN_H
-
-#include <QListWidget>
-#include <QVBoxLayout>
-#include <QTimer>
-#include <QFileSystemWatcher>
-#include <QMouseEvent>
-
-#include "../LDPlugin.h"
-
-class DesktopViewPlugin : public LDPlugin{
- Q_OBJECT
-public:
- DesktopViewPlugin(QWidget* parent, QString ID);
- ~DesktopViewPlugin();
-
- virtual QSize defaultPluginSize(){
- // The returned QSize is in grid points (typically 100 or 200 pixels square)
- return QSize(3,3);
- }
-private:
- QListWidget *list;
- QMenu *menu;
-
-private slots:
- void runItems();
- void copyItems();
- void cutItems();
- void deleteItems();
- void showMenu(const QPoint&);
- void increaseIconSize();
- void decreaseIconSize();
- void updateContents();
- void displayProperties();
-
-
-public slots:
- void LocaleChange(){
- QTimer::singleShot(0,this, SLOT(updateContents()));
- }
- void ThemeChange(){
- QTimer::singleShot(0,this, SLOT(updateContents()));
- }
-
-};
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/messagecenter/LXDG-DBusNotifier.h b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/messagecenter/LXDG-DBusNotifier.h
deleted file mode 100644
index 64413e95..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/messagecenter/LXDG-DBusNotifier.h
+++ /dev/null
@@ -1,17 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// Simple DBUS message handler for the FreeDesktop desktop notifications specification
-
-
-class LXDG-DBusNotifier : public QDBusVirtualObkect{
- Q_OBJECT
-public:
-
-private:
-
-
-};
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/messagecenter/MessageCenter.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/messagecenter/MessageCenter.cpp
deleted file mode 100644
index df07a122..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/messagecenter/MessageCenter.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-#include "MessageCenter.h"
-
-#include <LuminaXDG.h>
-#include <QVBoxLayout>
-#include <QHBoxLayout>
-#include <QDBusConnection>
-#include <QDBusConnectionInterface>
-
-MessageCenterPlugin::MessageCenterPlugin(QWidget* parent, QString ID) : LDPlugin(parent, ID){
- //Setup the UI
- QVBoxLayout *vlay = new QVBoxLayout();
- this->setLayout( new QVBoxLayout() );
- this->layout()->setContentsMargins(0,0,0,0);
- vlay->setContentsMargins(3,3,3,3);
- frame = new QFrame(this);
- frame->setObjectName("messagecenterbase");
- this->layout()->addWidget(frame);
- frame->setLayout(vlay);
-
-
- //Setup the title bar header buttons
- QHBoxLayout *hlay = new QHBoxLayout();
- tool_clearall = new QToolButton(this);
- tool_clearall->setAutoRaise(true);
- tool_clearone = new QToolButton(this);
- tool_clearone->setAutoRaise(true);
- QWidget *spacer = new QWidget(this);
- spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- hlay->addWidget(spacer);
- hlay->addWidget(tool_clearone);
- hlay->addWidget(tool_clearall);
- vlay->addLayout(hlay);
-
- //Setup the main text widget
- list_messages = new QListWidget(this);
- list_messages->setSelectionMode(QAbstractItemView::SingleSelection);
- list_messages->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- vlay->addWidget(list_messages);
-
- //Now setup the initial values
- this->setInitialSize(200,300);
- //Setup the button connections
- connect(tool_clearall, SIGNAL(clicked()), this, SLOT(clearAllMessages()) );
- connect(tool_clearone, SIGNAL(clicked()), this, SLOT(clearSelectedMessage()) );
-
- //Setup the DBUS signals/slots
- if(QDBusConnection::sessionBus().isConnected()){
- if( QDBusConnection::sessionBus().registerService("org.freedesktop.Notifications") ){
- //Was able to register this service, also register everything it can do...
- //SUPPORTED: "body", "body-hyperlinks", "body-markup", "icon-static"
-
-
- }
- QDBusConnection::sessionBus().connect("", "", "org.freedesktop.Notifications", "Notify", this, SLOT(newMessage(QString, uint, QString, QString, QString, QStringList, dict, int)) );
- QDBusConnection::sessionBus().interface().call("AddMatch", "interface='org.freedesktop.Notifications',member='Notify',type='method_call',eavesdrop='true'");
- qDebug() << "Available Session DBUS Services:" << QDBusConnection::sessionBus().interface()->registeredServiceNames().value();
- //connect(QString(), QString(),
- }
- if(QDBusConnection::systemBus().isConnected()){
- qDebug() << "Available System DBUS Services:" << QDBusConnection::systemBus().interface()->registeredServiceNames().value();
- }
-
- QTimer::singleShot(0,this, SLOT(loadIcons()) );
-}
-
-MessageCenterPlugin::~MessageCenterPlugin(){
-
-}
-
-void MessageCenterPlugin::newMessage(QString summary, QString body){
- qDebug() << "New Message:" << summary, body;
-}
-
-void MessageCenterPlugin::clearAllMessages(){
- list_messages->clear();
-}
-
-void MessageCenterPlugin::clearSelectedMessage(){
- if( list_messages->currentItem()==0){ return; } //nothing selected
- list_messages->removeItemWidget( list_messages->currentItem() );
-}
-
-
-void MessageCenterPlugin::loadIcons(){
- tool_clearall->setIcon( LXDG::findIcon("edit-clear-list","") );
- tool_clearall->setToolTip( tr("Clear all messages") );
- tool_clearone->setIcon( LXDG::findIcon("edit-delete","") );
- tool_clearone->setToolTip( tr("Clear selected message") );
-
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/messagecenter/MessageCenter.h b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/messagecenter/MessageCenter.h
deleted file mode 100644
index 8491546f..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/messagecenter/MessageCenter.h
+++ /dev/null
@@ -1,48 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This plugin is a simple DBUS monitor which display's messages that come in
-//===========================================
-#ifndef _LUMINA_DESKTOP_MESSAGE_CENTER_PLUGIN_H
-#define _LUMINA_DESKTOP_MESSAGE_CENTER_PLUGIN_H
-
-#include <QListWidget>
-#include <QToolButton>
-#include <QFrame>
-
-#include <QTimer>
-#include "../LDPlugin.h"
-
-class MessageCenterPlugin : public LDPlugin{
- Q_OBJECT
-public:
- MessageCenterPlugin(QWidget* parent, QString ID);
- ~MessageCenterPlugin();
-
-private:
- //QDBusConnection *sess, *sys;
- QListWidget *list_messages;
- QFrame *frame;
- QToolButton *tool_clearall; //clear all messages
- QToolButton *tool_clearone; //clear selected message
-
-private slots:
- //void newMessage(QDBusMessage *message);
- void clearAllMessages();
- void clearSelectedMessage();
-
- void loadIcons();
-
-public slots:
- void LocaleChange(){
- QTimer::singleShot(0,this, SLOT(loadIcons()));
- }
- void ThemeChange(){
- QTimer::singleShot(0,this, SLOT(loadIcons()));
- }
-
-};
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/notepad/NotepadPlugin.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/notepad/NotepadPlugin.cpp
deleted file mode 100644
index 6d321305..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/notepad/NotepadPlugin.cpp
+++ /dev/null
@@ -1,330 +0,0 @@
-#include "NotepadPlugin.h"
-
-#include <LuminaXDG.h>
-#include "LSession.h"
-#include <LUtils.h>
-#include <QDir>
-#include <QFileDialog>
-#include <QInputDialog>
-#include <QtConcurrent>
-
-NotePadPlugin::NotePadPlugin(QWidget* parent, QString ID) : LDPlugin(parent, ID){
- //qDebug() << "Creating Notepad Plugin:";
- QVBoxLayout *vlay = new QVBoxLayout();
- this->setLayout( new QVBoxLayout() );
- this->layout()->setContentsMargins(0,0,0,0);
- vlay->setContentsMargins(3,3,3,3);
- frame = new QFrame(this);
- frame->setObjectName("notepadbase");
- //frame->setStyleSheet("QFrame#notepadbase{border-width: 1px; background: rgba(255,255,255,50); color: black;} QFrame{ border: none; border-radius: 3px; background: rgba(255,255,255,100); color: black;}");
- this->layout()->addWidget(frame);
- frame->setLayout(vlay);
-
- if(!QFile::exists(QDir::homePath()+"/Notes")){
- //Create the notes directory if non-existant
- QDir dir;
- dir.mkpath(QDir::homePath()+"/Notes");
- }
- watcher = new QFileSystemWatcher(this);
- //Always watch the notes directory for new files/changes
- watcher->addPath(QDir::homePath()+"/Notes");
-
- typeTimer = new QTimer(this);
- typeTimer->setInterval(1000); // 1 second before it saves
- typeTimer->setSingleShot(true); //compress lots of signals into a single save
-
- updating = false;
- //Setup the title bar header buttons
- QHBoxLayout *hlay = new QHBoxLayout();
- config = new QToolButton(this);
- config->setAutoRaise(true);
- config->setMenu(new QMenu(this));
- config->setPopupMode(QToolButton::InstantPopup);
- /*open = new QToolButton(this);
- open->setAutoRaise(true);
- add = new QToolButton(this);
- add->setAutoRaise(true);
- rem = new QToolButton(this);
- rem->setAutoRaise(true);*/
- cnote = new QComboBox(this);
-
- hlay->addWidget(cnote);
- hlay->addWidget(config);
- //hlay->addWidget(open);
- //hlay->addWidget(add);
- //hlay->addWidget(rem);
- vlay->addLayout(hlay);
-
- //Setup the main text widget
- edit = new QPlainTextEdit(this);
- edit->setReadOnly(false);
- edit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- vlay->addWidget(edit);
- edit->setContextMenuPolicy(Qt::NoContextMenu);
-
- //Now load the new file-based system for saving notes
- //qDebug() << "Saving a new setting";
- this->saveSetting("customFile",""); //always clear this when the plugin is initialized (only maintained per-session)
- //qDebug() << "Loading Notes Dir";
- QTimer::singleShot(10, this, SLOT(notesDirChanged()));
- //qDebug() << "Set Sizing";
-
- //qDebug() << "Connect Signals/slots";
- //Setup the button connections
- /*connect(open, SIGNAL(clicked()), this, SLOT(openNoteClicked()) );
- connect(add, SIGNAL(clicked()), this, SLOT(newNoteClicked()) );
- connect(rem, SIGNAL(clicked()), this, SLOT(remNote()) );*/
- //connect(config, SIGNAL(clicked()), this, SLOT(openConfigMenu()) );
- connect(edit, SIGNAL(textChanged()), this, SLOT(newTextAvailable()) );
- connect(cnote, SIGNAL(currentIndexChanged(QString)), this, SLOT(noteChanged()) );
- connect(typeTimer, SIGNAL(timeout()), this, SLOT(updateContents()) );
- connect(watcher, SIGNAL(directoryChanged(QString)), this, SLOT(notesDirChanged()) ); //re-load the available notes
- connect(watcher, SIGNAL(fileChanged(QString)), this, SLOT(noteChanged()) ); //re-load the current file
- QTimer::singleShot(0,this, SLOT(loadIcons()) );
- //qDebug() << " - Done with init";
-}
-
-NotePadPlugin::~NotePadPlugin(){
-
-}
-
-
-void NotePadPlugin::openNote(){
- //qDebug() << "Open New Note:";
- //Prompt for a name for the new note
- QFileDialog dlg(0, Qt::Dialog | Qt::WindowStaysOnTopHint );
- dlg.setFileMode(QFileDialog::ExistingFile);
- dlg.setAcceptMode(QFileDialog::AcceptOpen);
- dlg.setNameFilters( QStringList() << tr("Note Files (*.note)") << tr("Text Files (*)"));
- dlg.setWindowTitle(tr("Open a note file"));
- dlg.setWindowIcon( LXDG::findIcon("document-open","") );
- dlg.setDirectory(QDir::homePath()); //start in the home directory
- //ensure it is centered on the current screen
- QPoint center = QApplication::desktop()->screenGeometry(this).center();
- dlg.move( center.x()-(dlg.width()/2), center.y()-(dlg.height()/2) );
- dlg.show();
- while( dlg.isVisible() ){
- QApplication::processEvents();
- }
- QStringList sel = dlg.selectedFiles();
- if(sel.isEmpty() || dlg.result()!=QDialog::Accepted){ return; } //cancelled
- QString fullpath = sel.first();
- QString name = fullpath.section("/",-1);
- //qDebug() << " - Found Note:" << name << fullpath;
- int index = cnote->findText(name, Qt::MatchExactly | Qt::MatchCaseSensitive);
- if(QFile::exists(fullpath) && index <0){
- //Alternate option of searching for the file in the list
- index = cnote->findText(fullpath, Qt::MatchExactly | Qt::MatchCaseSensitive);
- }
- if(index>=0){
- //This note already exists: just load it
- cnote->setCurrentIndex(index);
- }else{
- //New note - add it to the end of the list and then load it
- cnote->addItem(name, fullpath);
- this->saveSetting("customFile", fullpath); //save this as a custom file
- cnote->setCurrentIndex( cnote->count()-1 );
- QTimer::singleShot(1000, this, SLOT(notesDirChanged())); //Make sure to refresh the list (only one custom file at a time)
- }
-}
-
-QString NotePadPlugin::newNoteName(QString oldname, bool tryagain){
- //Prompt for a name for the new note
- //qDebug() << "Create new note";
- QInputDialog dlg(0, Qt::Dialog | Qt::WindowStaysOnTopHint );
- dlg.setInputMode(QInputDialog::TextInput);
- dlg.setLabelText(tr("Name:"));
- dlg.setTextEchoMode(QLineEdit::Normal);
- if(tryagain){ dlg.setWindowTitle(tr("Invalid Note Name: Try Again")); }
- else{ dlg.setWindowTitle(tr("Select a Note Name")); }
- dlg.setWindowIcon( LXDG::findIcon("document-new","") );
- dlg.setTextValue(oldname);
- //ensure it is centered on the current screen
- QPoint center = QApplication::desktop()->screenGeometry(this).center();
- dlg.move( center.x()-(dlg.width()/2), center.y()-(dlg.height()/2) );
- dlg.show();
- while( dlg.isVisible() ){
- //this->thread()->usleep(300000); //300 ms between updates
- QApplication::processEvents();
- }
- QString name = dlg.textValue();
- //make sure to remove any "bad" characters from the name
- name.remove("\""); name.remove(";"); name.remove("\'"); name.replace("/","_");
- if(name.isEmpty() || dlg.result()!=QDialog::Accepted){ return ""; } //cancelled
- //Check validity of the new note filename
- QString fullpath = QDir::homePath()+"/Notes/"+name;
- if(!fullpath.endsWith(".note")){ fullpath.append(".note"); }
- if(QFile::exists(fullpath)){
- return newNoteName(name, true); //try again
- }
- return name; //good name - go ahead and return it
-}
-
-void NotePadPlugin::updateConfigMenu(){
- //Re-create the menu and open it
- config->menu()->clear();
- config->menu()->addAction(LXDG::findIcon("document-open",""), tr("Open Text File"), this, SLOT(openNoteClicked()) );
- config->menu()->addAction(LXDG::findIcon("document-new",""), tr("Create a Note"), this, SLOT(newNoteClicked()) );
- if(cnote->currentIndex()>=0){
- config->menu()->addSeparator();
- config->menu()->addAction(LXDG::findIcon("document-edit",""), tr("Rename Note"), this, SLOT(renameNote()) );
- config->menu()->addAction(LXDG::findIcon("document-close",""), tr("Delete Note"), this, SLOT(remNote()) );
- }
-}
-
-void NotePadPlugin::openNoteClicked(){
- openNote();
-}
-
-void NotePadPlugin::newNoteClicked(){
- //QtConcurrent::run(this, &NotePadPlugin::newNote);
- QString name = newNoteName();
- if(name.isEmpty()){ return; }
- QString fullpath = QDir::homePath()+"/Notes/"+name;
- if(!fullpath.endsWith(".note")){ fullpath.append(".note"); }
- //qDebug() << " - New Note:" << name << fullpath;
- int index = cnote->findText(name, Qt::MatchExactly | Qt::MatchCaseSensitive);
- if(QFile::exists(fullpath) && index <0){
- //Alternate option of searching for the file in the list
- index = cnote->findText(fullpath, Qt::MatchExactly | Qt::MatchCaseSensitive);
- }
- if(index>=0){
- //This note already exists: just load it
- cnote->setCurrentIndex(index);
- }else{
- //New note - add it to the end of the list and then load it
- cnote->addItem(name, fullpath);
- cnote->setCurrentIndex( cnote->count()-1 );
- }
-}
-
-void NotePadPlugin::remNote(){
- QString note = cnote->currentData().toString();
- if(note.isEmpty()){ return; }
- watcher->removePath(note); //remove this file from the watcher
- this->saveSetting("currentFile",""); //reset the internal value
- QFile::remove(note); //remove the file
- //if(!note.startsWith(QDir::homePath()+"/Notes/") ){
- //If the file was not in the notes directory, need to manually prompt for a re-load
- // otherwise, the directory watcher will catch it and trigger a re-load (no need to double-load)
- notesDirChanged();
- //}
-}
-
-void NotePadPlugin::renameNote(){
- int item = cnote->currentIndex();
- if(item<0){ return; } //nothing selected
- QString oldpath = cnote->currentData().toString();
- if(oldpath.isEmpty() || !oldpath.endsWith(".note")){ return; }
- QString name = newNoteName(cnote->currentText());
- if(name.isEmpty()){ return; }
- QString fullpath = QDir::homePath()+"/Notes/"+name;
- if(!fullpath.endsWith(".note")){ fullpath.append(".note"); }
- //qDebug() << " - New Note:" << name << fullpath;
- //Update the current item data to point to this file
- cnote->setItemText(item, name);
- cnote->setItemData(item, fullpath);
- //Now move the file over
- QFile::rename(oldpath, fullpath);
- noteChanged();
-}
-
-void NotePadPlugin::newTextAvailable(){
- if(updating){ return; } //programmatic change of the widget
- if(typeTimer->isActive()){ typeTimer->stop(); }
- typeTimer->start();
-}
-
-void NotePadPlugin::updateContents(){
- if(updating){ return; } //this was a programmatic change to the widget
- //The text was changed in the plugin - save it in the file
- QString note = cnote->currentData().toString();
- updating = true;
- LUtils::writeFile(note, edit->toPlainText().split("\n"), true);
- QApplication::processEvents(); //make sure to process/discard the file changed signal before disabling the flag
- updating = false;
-}
-
-void NotePadPlugin::notesDirChanged(){
- if(updating){ return; }
- QString cfile = this->readSetting("currentFile","").toString();
- QStringList notes;
- QDir dir(QDir::homePath()+"/Notes");
- QStringList files = dir.entryList(QStringList() << "*.note", QDir::Files | QDir::NoDotAndDotDot, QDir::Name);
- for(int i=0; i<files.length(); i++){
- notes << dir.absoluteFilePath(files[i]);
- }
- QString custom = this->readSetting("customFile","").toString();
- if(!custom.isEmpty() && QFile::exists(custom) ){ notes << custom; }
- //qDebug() << "Available Notes:" << notes << cfile;
- //Now update the UI list
- updating = true; //don't refresh the UI until done changing lists
- cnote->clear();
- bool found = false;
- for(int i=0; i<notes.length(); i++){
- QString name = notes[i].section("/",-1);
- if(name.endsWith(".note")){ name.chop(5); }
- cnote->addItem(name, notes[i]);
- if(notes[i]==cfile){ cnote->setCurrentIndex(i); found = true;}
- }
- if(!found && !cfile.isEmpty() && QFile::exists(cfile)){
- //Current note is a manually-loaded text file
- cnote->addItem(cfile.section("/",-1), cfile);
- cnote->setCurrentIndex( cnote->count()-1 ); //last item
- found = true;
- }
- if(!found && cnote->count()>0){ cnote->setCurrentIndex(0); }
- updating =false;
- noteChanged();
-}
-
-void NotePadPlugin::noteChanged(){
- if(updating){ return; }
- updating =true;
- QString note;
- if(cnote->currentIndex()>=0){
- note = cnote->currentData().toString();
- }
- QTimer::singleShot(0, this, SLOT(updateConfigMenu()) );
- if(note.isEmpty() && cnote->count()>0){
- updating=false;
- cnote->setCurrentIndex(0);
- return;
- }
- QString oldnote = this->readSetting("currentFile","").toString();
- //qDebug() << "Note Changed:" << note << oldnote;
- if( oldnote!=note ){
- //Clear the old note file/setting
- if(!oldnote.isEmpty()){
- watcher->removePath(oldnote);
- this->saveSetting("currentFile","");
- }
- if(!note.isEmpty()){
- this->saveSetting("currentFile",note);
- watcher->addPath(note);
- }
- }
-
- if(!note.isEmpty()){
- QString text = LUtils::readFile(note).join("\n");
- if(text!=edit->toPlainText()){
- edit->setPlainText( text );
- }
- }else{
- edit->clear();
- }
- //If no notes available - disable the editor until a new one is created
- edit->setEnabled(!note.isEmpty());
- //rem->setEnabled(!note.isEmpty());
- cnote->setEnabled(!note.isEmpty());
- //leave the new/open buttons enabled all the time
- updating = false;
-}
-
-
-void NotePadPlugin::loadIcons(){
- /*open->setIcon( LXDG::findIcon("document-open","") );
- add->setIcon( LXDG::findIcon("document-new","") );
- rem->setIcon( LXDG::findIcon("document-close","") );*/
- config->setIcon( LXDG::findIcon("configure","") );
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/notepad/NotepadPlugin.h b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/notepad/NotepadPlugin.h
deleted file mode 100644
index 5084dadf..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/notepad/NotepadPlugin.h
+++ /dev/null
@@ -1,66 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This plugin is a simple text editor for notes on the desktop
-//===========================================
-#ifndef _LUMINA_DESKTOP_NOTEPAD_PLUGIN_H
-#define _LUMINA_DESKTOP_NOTEPAD_PLUGIN_H
-
-#include <QPlainTextEdit>
-#include <QToolButton>
-#include <QComboBox>
-#include <QVBoxLayout>
-#include <QTimer>
-#include <QFileSystemWatcher>
-#include "../LDPlugin.h"
-
-class NotePadPlugin : public LDPlugin{
- Q_OBJECT
-public:
- NotePadPlugin(QWidget* parent, QString ID);
- ~NotePadPlugin();
-
- virtual QSize defaultPluginSize(){
- // The returned QSize is in grid points (typically 100 or 200 pixels square)
- return QSize(3,3);
- }
-private:
- QPlainTextEdit *edit;
- QToolButton *config; //*open, *add, *rem;
- QComboBox *cnote;
- QFrame *frame;
- QFileSystemWatcher *watcher;
- bool updating;
- QTimer *typeTimer;
-
- void openNote();
- QString newNoteName(QString oldname = "", bool tryagain = false);
-
-private slots:
- void updateConfigMenu();
-
- void openNoteClicked();
- void newNoteClicked();
- void remNote();
- void renameNote();
- void newTextAvailable();
- void updateContents();
-
- void notesDirChanged();
- void noteChanged();
-
- void loadIcons();
-
-public slots:
- void LocaleChange(){
- QTimer::singleShot(0,this, SLOT(noteChanged()));
- }
- void ThemeChange(){
- QTimer::singleShot(0,this, SLOT(loadIcons()));
- }
-
-};
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/quickcontainer/QuickDPlugin.h b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/quickcontainer/QuickDPlugin.h
deleted file mode 100644
index d6039ac0..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/quickcontainer/QuickDPlugin.h
+++ /dev/null
@@ -1,51 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This class is a simple container for a QtQuick plugin
-//===========================================
-#ifndef _LUMINA_DESKTOP_DESKTOP_PLUGIN_QUICK_H
-#define _LUMINA_DESKTOP_DESKTOP_PLUGIN_QUICK_H
-
-#include <QQuickWidget>
-#include <QVBoxLayout>
-#include "../LDPlugin.h"
-
-#include <LUtils.h>
-
-class QuickDPlugin : public LDPlugin{
- Q_OBJECT
-public:
- QuickDPlugin(QWidget* parent, QString ID) : LDPlugin(parent, ID){
- this->setLayout( new QVBoxLayout());
- this->layout()->setContentsMargins(0,0,0,0);
- container = new QQuickWidget(this);
- container->setResizeMode(QQuickWidget::SizeRootObjectToView);
- connect(container, SIGNAL(statusChanged(QQuickWidget::Status)), this, SLOT(statusChange(QQuickWidget::Status)) );
- this->layout()->addWidget(container);
- container->setSource(QUrl::fromLocalFile( LUtils::findQuickPluginFile(ID.section("---",0,0)) ));
- QApplication::processEvents(); //to check for errors right away
- //this->setInitialSize(container->initialSize().width(), container->initialSize().height());
- }
-
- ~QuickDPlugin(){}
-
- virtual QSize defaultPluginSize(){
- // The returned QSize is in grid points (typically 100 or 200 pixels square)
- return QSize(2,2);
- }
-private:
- QQuickWidget *container;
-
-private slots:
- void statusChange(QQuickWidget::Status status){
- if(status == QQuickWidget::Error){
- qDebug() << "Quick Widget Error:" << this->ID();
- container->setSource(QUrl()); //clear out the script - experienced an error
- }
- }
-
-};
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSFeedPlugin.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSFeedPlugin.cpp
deleted file mode 100644
index c330d6c0..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSFeedPlugin.cpp
+++ /dev/null
@@ -1,363 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2016, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "RSSFeedPlugin.h"
-#include "ui_RSSFeedPlugin.h"
-
-#include <LuminaXDG.h>
-#include "LSession.h"
-#include <LUtils.h>
-#include <QDir>
-#include <QFileDialog>
-#include <QInputDialog>
-#include <QtConcurrent>
-
-RSSFeedPlugin::RSSFeedPlugin(QWidget* parent, QString ID) : LDPlugin(parent, ID), ui(new Ui::RSSFeedPlugin()){
- ui->setupUi(this);
- //Load the global settings
- setprefix = "rssreader/"; //this structure/prefix should be used for *all* plugins of this type
- RSS = new RSSReader(this, setprefix);
- ui->text_feed->setContextMenuPolicy(Qt::NoContextMenu);
- //Create the options menu
- optionsMenu = new QMenu(this);
- ui->tool_options->setMenu(optionsMenu);
- presetMenu = new QMenu(this);
- ui->tool_add_preset->setMenu(presetMenu);
-
- //Setup any signal/slot connections
- connect(ui->push_back1, SIGNAL(clicked()), this, SLOT(backToFeeds()) );
- connect(ui->push_back2, SIGNAL(clicked()), this, SLOT(backToFeeds()) );
- connect(ui->push_back3, SIGNAL(clicked()), this, SLOT(backToFeeds()) );
- connect(ui->push_save_settings, SIGNAL(clicked()), this, SLOT(saveSettings()) );
- connect(RSS, SIGNAL(rssChanged(QString)), this, SLOT(RSSItemChanged(QString)) );
- connect(RSS, SIGNAL(newChannelsAvailable()), this, SLOT(UpdateFeedList()));
- connect(ui->tool_gotosite, SIGNAL(clicked()), this, SLOT(openFeedPage()) );
- connect(ui->push_rm_feed, SIGNAL(clicked()), this, SLOT(removeFeed()) );
- connect(ui->push_add_url, SIGNAL(clicked()), this, SLOT(addNewFeed()) );
- connect(ui->combo_feed, SIGNAL(currentIndexChanged(int)), this, SLOT(currentFeedChanged()) );
-
- connect(presetMenu, SIGNAL(triggered(QAction*)), this, SLOT(loadPreset(QAction*)) );
-
- updateOptionsMenu();
- QTimer::singleShot(0,this, SLOT(ThemeChange()) );
- //qDebug() << " - Done with init";
- QStringList feeds;
- if( !LSession::handle()->DesktopPluginSettings()->contains(setprefix+"currentfeeds") ){
- //First-time run of the plugin - automatically load the default feeds
- feeds = LOS::RSSFeeds();
- for(int i=0; i<feeds.length(); i++){ feeds[i] = feeds[i].section("::::",1,-1); } //just need url right now
- feeds << "http://lumina-desktop.org/?feed=rss2"; //Lumina Desktop blog feed
- LSession::handle()->DesktopPluginSettings()->setValue(setprefix+"currentfeeds", feeds);
- }else{
- feeds = LSession::handle()->DesktopPluginSettings()->value(setprefix+"currentfeeds",QStringList()).toStringList();
- }
- RSS->addUrls(feeds);
- backToFeeds(); //always load the first page
-}
-
-RSSFeedPlugin::~RSSFeedPlugin(){
-
-}
-
-//================
-// PRIVATE
-//================
-void RSSFeedPlugin::updateOptionsMenu(){
- optionsMenu->clear();
- optionsMenu->addAction(LXDG::findIcon("list-add",""), tr("Add RSS Feed"), this, SLOT(openFeedNew()) );
- optionsMenu->addAction(LXDG::findIcon("help-about",""), tr("View Feed Details"), this, SLOT(openFeedInfo()) );
- optionsMenu->addAction(LXDG::findIcon("configure",""), tr("Settings"), this, SLOT(openSettings()) );
- optionsMenu->addSeparator();
- optionsMenu->addAction(LXDG::findIcon("download",""), tr("Update Feeds Now"), this, SLOT(resyncFeeds()) );
-
- presetMenu->clear();
- QStringList feeds = LOS::RSSFeeds();
- feeds << tr("Lumina Desktop RSS")+"::::http://lumina-desktop.org/?feed=rss2";
- feeds.sort();
- for(int i=0; i<feeds.length(); i++){
- QAction *tmp = presetMenu->addAction(feeds[i].section("::::",0,0) );
- tmp->setWhatsThis( feeds[i].section("::::",1,-1) );
- }
-}
-
-void RSSFeedPlugin::checkFeedNotify(){
- bool notify = false;
- for(int i=0; i<ui->combo_feed->count() && !notify; i++){
- if( !ui->combo_feed->itemData(i, Qt::WhatsThisRole).toString().isEmpty()){ notify = true; }
- }
- QString style;
- if(notify){ style = "QComboBox{ background-color: rgba(255,0,0,120); }"; }
- ui->combo_feed->setStyleSheet(style);
-}
-
-//Simplification functions for loading feed info onto widgets
-void RSSFeedPlugin::updateFeed(QString ID){
- //Now clear/update the feed viewer (HTML)
- ui->text_feed->clear();
- if(ID.isEmpty()){ return; } //nothing to show
-
- //Save the datetime this feed was read
- LSession::handle()->DesktopPluginSettings()->setValue(setprefix+"feedReads/"+ID, QDateTime::currentDateTime() );
- //Get the color to use for hyperlinks (need to specify in html)
- QString color = ui->text_feed->palette().text().color().name(); //keep the hyperlinks the same color as the main text (different formatting still applies)
- QString html;
- RSSchannel data = RSS->dataForID(ID);
- ui->label_lastupdate->setText( data.lastsync.toString(Qt::DefaultLocaleShortDate) );
- // - generate the html
- // html.append("<ul style=\"margin-left: 3px;\">\n");
- for(int i=0; i<data.items.length(); i++){
- //html.append("<li>");
- html.append("<h4><a href=\""+data.items[i].link+"\" style=\"color: "+color+";\">"+data.items[i].title+"</a></h4>");
- if(!data.items[i].pubdate.isNull() || !data.items[i].author.isEmpty()){
- html.append("<i>(");
- if(!data.items[i].pubdate.isNull()){ html.append(data.items[i].pubdate.toString(Qt::DefaultLocaleShortDate)); }
- if(!data.items[i].author.isEmpty()){
- if(!html.endsWith("(")){ html.append(", "); } //spacing between date/author
- if(!data.items[i].author_email.isEmpty()){ html.append("<a href=\"mailto:"+data.items[i].author_email+"\" style=\"color: "+color+";\">"+data.items[i].author+"</a>"); }
- else{ html.append(data.items[i].author); }
- }
- html.append(")</i><br>");
- }
- html.append(data.items[i].description);
- //html.append("</li>\n");
- if(i+1 < data.items.length()){ html.append("<br>"); }
- }
- //html.append("</ul>\n");
- // - load that html into the viewer
- ui->text_feed->setHtml(html);
-}
-
-void RSSFeedPlugin::updateFeedInfo(QString ID){
- ui->page_feed_info->setWhatsThis(ID);
- ui->text_feed_info->clear();
- if(ID.isEmpty()){ return; }
- //Get the color to use for hyperlinks (need to specify in html)
- QString color = ui->text_feed->palette().text().color().name(); //keep the hyperlinks the same color as the main text (different formatting still applies)
- QString html;
- RSSchannel data = RSS->dataForID(ID);
- // - generate the html
- // <a href=\""+LINK+"\" style=\"color: "+color+";\">"+TEXT+"</a>
- html.append( QString(tr("Feed URL: %1")).arg("<a href=\""+data.originalURL+"\" style=\"color: "+color+";\">"+data.originalURL+"</a>") +"<br><hr>");
- html.append( QString(tr("Title: %1")).arg(data.title) +"<br>");
- html.append( QString(tr("Description: %1")).arg(data.description) +"<br>");
- html.append( QString(tr("Website: %1")).arg("<a href=\""+data.link+"\" style=\"color: "+color+";\">"+data.link+"</a>") +"<br><hr>");
- if(!data.lastBuildDate.isNull()){ html.append( QString(tr("Last Build Date: %1")).arg(data.lastBuildDate.toString(Qt::DefaultLocaleShortDate)) +"<br>"); }
- html.append( QString(tr("Last Sync: %1")).arg(data.lastsync.toString(Qt::DefaultLocaleShortDate)) +"<br>");
- html.append( QString(tr("Next Sync: %1")).arg(data.nextsync.toString(Qt::DefaultLocaleShortDate)) +"<br>");
- // - load that html into the viewer
- ui->text_feed_info->setHtml(html);
-}
-
-//================
-// PRIVATE SLOTS
-//================
-void RSSFeedPlugin::loadIcons(){
- ui->tool_options->setIcon( LXDG::findIcon("configure","") );
- ui->tool_gotosite->setIcon( LXDG::findIcon("applications-internet","") );
- ui->push_back1->setIcon( LXDG::findIcon("go-previous","") );
- ui->push_back2->setIcon( LXDG::findIcon("go-previous","") );
- ui->push_back3->setIcon( LXDG::findIcon("go-previous","") );
- ui->push_rm_feed->setIcon( LXDG::findIcon("list-remove","") );
- ui->push_add_url->setIcon( LXDG::findIcon("list-add","") );
- ui->push_save_settings->setIcon( LXDG::findIcon("document-save","") );
- ui->tool_add_preset->setIcon( LXDG::findIcon("bookmark-new-list","") );
-}
-
-//GUI slots
-// - Page management
-void RSSFeedPlugin::backToFeeds(){
- ui->stackedWidget->setCurrentWidget(ui->page_feed);
-}
-
-void RSSFeedPlugin::openFeedInfo(){
- QString ID = ui->combo_feed->currentData().toString();
- if(ID.isEmpty()){ return; }
- updateFeedInfo(ID);
- ui->stackedWidget->setCurrentWidget(ui->page_feed_info);
-
-}
-
-void RSSFeedPlugin::openFeedNew(){
- ui->line_new_url->setText("");
- ui->stackedWidget->setCurrentWidget(ui->page_new_feed);
-}
-
-void RSSFeedPlugin::openSettings(){
- //Sync the widget with the current settings
- QSettings *set = LSession::handle()->DesktopPluginSettings();
-
- ui->check_manual_sync->setChecked( set->value(setprefix+"manual_sync_only", false).toBool() );
- int DI = set->value(setprefix+"default_interval_minutes", 60).toInt();
- if(DI<1){ DI = 60; }
- if( (DI%60) == 0 ){DI = DI/60; ui->combo_sync_units->setCurrentIndex(1); } //hourly setting
- else{ ui->combo_sync_units->setCurrentIndex(1); } //minutes setting
- ui->spin_synctime->setValue(DI);
-
- //Now show the page
- ui->stackedWidget->setCurrentWidget(ui->page_settings);
-}
-
-// - Feed Management
-void RSSFeedPlugin::addNewFeed(){
- if(ui->line_new_url->text().isEmpty()){ return; } //nothing to add
- //Validate the URL
- QUrl url(ui->line_new_url->text());
- if(!url.isValid()){
- ui->line_new_url->setFocus();
- return;
- }
- //Add the URL to the settings file for next login
- QStringList feeds = LSession::handle()->DesktopPluginSettings()->value(setprefix+"currentfeeds",QStringList()).toStringList();
- feeds << url.toString();
- LSession::handle()->DesktopPluginSettings()->setValue(setprefix+"currentfeeds", feeds);
-
- //Set this URL as the current selection
- ui->combo_feed->setWhatsThis(url.toString()); //hidden field - will trigger an update in a moment
- //Add the URL to the backend
- RSS->addUrls(QStringList() << url.toString());
- //UpdateFeedList(); //now re-load the feeds which are available
-
- //Now go back to the main page
- backToFeeds();
-}
-
-void RSSFeedPlugin::loadPreset(QAction *act){
- ui->line_new_url->setText( act->whatsThis() );
-}
-
-void RSSFeedPlugin::removeFeed(){
- QString ID = ui->page_feed_info->whatsThis();
- if(ID.isEmpty()){ return; }
- //Remove from the RSS feed object
- RSSchannel info = RSS->dataForID(ID);
- RSS->removeUrl(ID);
- //Remove the URL from the settings file for next login
- QStringList feeds = LSession::handle()->DesktopPluginSettings()->value(setprefix+"currentfeeds",QStringList()).toStringList();
- feeds.removeAll(info.originalURL);
- LSession::handle()->DesktopPluginSettings()->setValue(setprefix+"currentfeeds", feeds);
- LSession::handle()->DesktopPluginSettings()->remove(setprefix+"feedReads/"+ID);
- //Now go back to the main page
- backToFeeds();
-}
-
-void RSSFeedPlugin::resyncFeeds(){
- RSS->addUrls( LSession::handle()->DesktopPluginSettings()->value(setprefix+"currentfeeds",QStringList()).toStringList() );
- RSS->syncNow();
-}
-
-// - Feed Interactions
-void RSSFeedPlugin::currentFeedChanged(){
- QString ID = ui->combo_feed->currentData().toString();
- //Remove the "unread" color/flag from the feed
- ui->combo_feed->setItemData( ui->combo_feed->currentIndex(), QBrush(Qt::transparent) , Qt::BackgroundRole);
- ui->combo_feed->setItemData( ui->combo_feed->currentIndex(), "", Qt::WhatsThisRole);
- checkFeedNotify();
- updateFeed(ID);
-}
-
-void RSSFeedPlugin::openFeedPage(){ //Open main website for feed
- QString ID = ui->combo_feed->currentData().toString();
- //Find the data associated with this feed
- RSSchannel data = RSS->dataForID(ID);
- QString url = data.link;
- //qDebug() << "Open Feed Page:" << url;
- //Now launch the browser
- if(!url.isEmpty()){
- LSession::LaunchApplication("lumina-open \""+url+"\"");
- }
-}
-
-void RSSFeedPlugin::saveSettings(){
- QSettings *set = LSession::handle()->DesktopPluginSettings();
- set->setValue(setprefix+"manual_sync_only", ui->check_manual_sync->isChecked() );
- int DI = ui->spin_synctime->value();
- if(ui->combo_sync_units->currentIndex()==1){ DI = DI*60; } //convert from hours to minutes
- set->setValue(setprefix+"default_interval_minutes", DI);
- set->sync();
-
- //Now go back to the feeds
- backToFeeds();
-}
-
-//Feed Object interactions
-void RSSFeedPlugin::UpdateFeedList(){
-
- QString activate = ui->combo_feed->whatsThis();
- if(!activate.isEmpty()){ ui->combo_feed->setWhatsThis(""); }
- if(activate.isEmpty()){ activate = ui->combo_feed->currentData().toString(); } // keep current item selected
- //Now get/list all the available feeds
- QStringList IDS = RSS->channels(); //this is pre-sorted by title of the feed
- //qDebug() << "Update RSS Feed List:" << IDS << activate;
- for(int i=0; i<IDS.length(); i++){
- bool newitem = false;
- if(ui->combo_feed->count()<=i){ newitem = true; }
- else{
- QString cid = ui->combo_feed->itemData(i).toString();
- if(IDS[i]!=cid){
- if(IDS.contains(cid)){ newitem = true; } //this item is just out of order
- else{ ui->combo_feed->removeItem(i); } //item no longer is valid
- }
- }
- if(newitem){
- //Need to add a new item at this point in the menu
- RSSchannel info = RSS->dataForID(IDS[i]);
- if(info.title.isEmpty()){
- //invalid/empty channel
- ui->combo_feed->insertItem(i, IDS[i], IDS[i]); //just show the URL
- }else{
- ui->combo_feed->insertItem(i, info.icon, info.title, IDS[i]);
- }
- }
- }
- //Remove any extra items on the end of the list
- for(int i=IDS.length(); i<ui->combo_feed->count(); i++){
- ui->combo_feed->removeItem(i); i--;
- }
- //Now activate the proper item as needed
- if(IDS.contains(activate)){
- ui->combo_feed->setCurrentIndex( IDS.indexOf(activate) );
- }
- checkFeedNotify();
-}
-
-void RSSFeedPlugin::RSSItemChanged(QString ID){
- for(int i=0; i<ui->combo_feed->count(); i++){
- if(ui->combo_feed->itemData(i).toString()!=ID){ continue; }
- RSSchannel info = RSS->dataForID(ID);
- if(info.title.isEmpty()){
- ui->combo_feed->setItemText(i, ID);
- ui->combo_feed->setItemIcon(i, LXDG::findIcon("dialog-cancel","") );
- }else{
- ui->combo_feed->setItemText(i, info.title);
- ui->combo_feed->setItemIcon(i, info.icon );
- QColor color(Qt::transparent);
- if( info.lastBuildDate > LSession::handle()->DesktopPluginSettings()->value(setprefix+"feedReads/"+ID,QDateTime()).toDateTime() ){
- color = QColor(255,10,10,100); //semi-transparent red
- ui->combo_feed->setItemData(i, "notify", Qt::WhatsThisRole);
- }else{
- ui->combo_feed->setItemData(i, "", Qt::WhatsThisRole);
- }
- ui->combo_feed->setItemData(i, QBrush(color) , Qt::BackgroundRole);
- }
- }
- if(ID == ui->combo_feed->currentData().toString()){
- currentFeedChanged(); //re-load the current feed
- }else{
- checkFeedNotify();
- }
-}
-
-//==================
-// PUBLIC SLOTS
-//==================
-void RSSFeedPlugin::LocaleChange(){
- ui->retranslateUi(this);
- updateOptionsMenu();
-}
-void RSSFeedPlugin::ThemeChange(){
- QTimer::singleShot(0,this, SLOT(loadIcons()));
- updateOptionsMenu();
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSFeedPlugin.h b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSFeedPlugin.h
deleted file mode 100644
index 68b36760..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSFeedPlugin.h
+++ /dev/null
@@ -1,72 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2016, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This plugin is a simple RSS feed reader for the desktop
-//===========================================
-#ifndef _LUMINA_DESKTOP_RSS_FEEDER_PLUGIN_H
-#define _LUMINA_DESKTOP_RSS_FEEDER_PLUGIN_H
-
-#include <QTimer>
-#include "../LDPlugin.h"
-
-#include "RSSObjects.h"
-
-namespace Ui{
- class RSSFeedPlugin;
-};
-
-class RSSFeedPlugin : public LDPlugin{
- Q_OBJECT
-public:
- RSSFeedPlugin(QWidget* parent, QString ID);
- ~RSSFeedPlugin();
-
- virtual QSize defaultPluginSize(){
- // The returned QSize is in grid points (typically 100 or 200 pixels square)
- return QSize(3,3);
- }
-private:
- Ui::RSSFeedPlugin *ui;
- QMenu *optionsMenu, *presetMenu;
- QString setprefix; //settings prefix
- RSSReader *RSS;
-
- void updateOptionsMenu();
- void checkFeedNotify(); //check if unread feeds are available and change the styling a bit as needed
-
- //Simplification functions for loading feed info onto widgets
- void updateFeed(QString ID);
- void updateFeedInfo(QString ID);
-
-private slots:
- void loadIcons();
-
- //GUI slots
- // - Page management
- void backToFeeds();
- void openFeedInfo();
- void openFeedNew();
- void openSettings();
- // - Feed Management
- void addNewFeed(); // the "add" button (current url in widget on page)
- void loadPreset(QAction*); //the add-preset menu
- void removeFeed(); // the "remove" button (current feed for page)
- void resyncFeeds();
- // - Feed Interactions
- void currentFeedChanged();
- void openFeedPage(); //Open the website in a browser
- void saveSettings();
-
- //Feed Object interactions
- void UpdateFeedList();
- void RSSItemChanged(QString ID);
-
-public slots:
- void LocaleChange();
- void ThemeChange();
-
-};
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSFeedPlugin.ui b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSFeedPlugin.ui
deleted file mode 100644
index dc7acd0b..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSFeedPlugin.ui
+++ /dev/null
@@ -1,552 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>RSSFeedPlugin</class>
- <widget class="QWidget" name="RSSFeedPlugin">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>238</width>
- <height>278</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Form</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="leftMargin">
- <number>3</number>
- </property>
- <property name="topMargin">
- <number>3</number>
- </property>
- <property name="rightMargin">
- <number>3</number>
- </property>
- <property name="bottomMargin">
- <number>3</number>
- </property>
- <item>
- <widget class="QStackedWidget" name="stackedWidget">
- <property name="currentIndex">
- <number>1</number>
- </property>
- <widget class="QWidget" name="page_feed">
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <property name="spacing">
- <number>3</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QComboBox" name="combo_feed"/>
- </item>
- <item>
- <widget class="QToolButton" name="tool_options">
- <property name="toolTip">
- <string>View Options</string>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="popupMode">
- <enum>QToolButton::InstantPopup</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="QLabel" name="label_lastupdate">
- <property name="text">
- <string notr="true"/>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_gotosite">
- <property name="toolTip">
- <string>Open Website</string>
- </property>
- <property name="text">
- <string>More</string>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- <property name="arrowType">
- <enum>Qt::NoArrow</enum>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QTextBrowser" name="text_feed">
- <property name="undoRedoEnabled">
- <bool>false</bool>
- </property>
- <property name="readOnly">
- <bool>true</bool>
- </property>
- <property name="html">
- <string notr="true">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
- </property>
- <property name="openExternalLinks">
- <bool>true</bool>
- </property>
- <property name="openLinks">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="page_feed_info">
- <layout class="QVBoxLayout" name="verticalLayout_3">
- <property name="spacing">
- <number>4</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>5</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_3">
- <item>
- <widget class="QPushButton" name="push_back1">
- <property name="text">
- <string>Back to Feeds</string>
- </property>
- <property name="flat">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QGroupBox" name="groupBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>Feed Information</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_4">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QTextBrowser" name="text_feed_info">
- <property name="html">
- <string notr="true">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
- </property>
- <property name="openExternalLinks">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_8">
- <item>
- <widget class="QPushButton" name="push_rm_feed">
- <property name="text">
- <string>Remove Feed</string>
- </property>
- <property name="flat">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="page_new_feed">
- <layout class="QVBoxLayout" name="verticalLayout_5">
- <property name="spacing">
- <number>4</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_4">
- <item>
- <widget class="QPushButton" name="push_back2">
- <property name="text">
- <string>Back to Feeds</string>
- </property>
- <property name="flat">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QGroupBox" name="groupBox_2">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>New Feed Subscription</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_6">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>2</number>
- </property>
- <property name="topMargin">
- <number>2</number>
- </property>
- <property name="rightMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>2</number>
- </property>
- <item>
- <widget class="QLabel" name="label">
- <property name="text">
- <string>RSS URL</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_10">
- <item>
- <widget class="QLineEdit" name="line_new_url"/>
- </item>
- <item>
- <widget class="QToolButton" name="tool_add_preset">
- <property name="toolTip">
- <string>Load a preset RSS Feed</string>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="popupMode">
- <enum>QToolButton::InstantPopup</enum>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_5">
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="push_add_url">
- <property name="text">
- <string>Add to Feeds</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="page_settings">
- <layout class="QVBoxLayout" name="verticalLayout_7">
- <property name="spacing">
- <number>4</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_6">
- <item>
- <widget class="QPushButton" name="push_back3">
- <property name="text">
- <string>Back to Feeds</string>
- </property>
- <property name="flat">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QGroupBox" name="groupBox_3">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>Feed Reader Settings</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_8">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>2</number>
- </property>
- <property name="topMargin">
- <number>2</number>
- </property>
- <property name="rightMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>2</number>
- </property>
- <item>
- <widget class="QCheckBox" name="check_manual_sync">
- <property name="text">
- <string>Manual Sync Only</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="groupBox_4">
- <property name="toolTip">
- <string>Some RSS feeds may request custom update intervals instead of using this setting</string>
- </property>
- <property name="title">
- <string>Default Sync Interval</string>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_7">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>2</number>
- </property>
- <property name="topMargin">
- <number>2</number>
- </property>
- <property name="rightMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>2</number>
- </property>
- <item>
- <widget class="QSpinBox" name="spin_synctime">
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>60</number>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QComboBox" name="combo_sync_units">
- <property name="currentText">
- <string>Hour(s)</string>
- </property>
- <property name="currentIndex">
- <number>1</number>
- </property>
- <item>
- <property name="text">
- <string>Minutes</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Hour(s)</string>
- </property>
- </item>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_9">
- <item>
- <spacer name="horizontalSpacer_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="push_save_settings">
- <property name="text">
- <string>Save Settings</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_4">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSObjects.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSObjects.cpp
deleted file mode 100644
index 0a805252..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSObjects.cpp
+++ /dev/null
@@ -1,287 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2016, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "RSSObjects.h"
-#include <QNetworkRequest>
-#include <QXmlStreamReader>
-
-#include "LSession.h"
-
-//============
-// PUBLIC
-//============
-RSSReader::RSSReader(QObject *parent, QString settingsPrefix) : QObject(parent){
- NMAN = new QNetworkAccessManager(this);
- connect(NMAN, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)) );
- connect(NMAN, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError>&)), this, SLOT(sslErrors(QNetworkReply*, const QList<QSslError>&)) );
-
- setprefix = settingsPrefix;
- syncTimer = new QTimer(this);
- syncTimer->setInterval(300000); //5 minutes
- connect(syncTimer, SIGNAL(timeout()), this, SLOT(checkTimes()));
- syncTimer->start();
-}
-
-RSSReader::~RSSReader(){
-
-}
-
-//Information retrieval
-QStringList RSSReader::channels(){
- QStringList urls = hash.keys();
- QStringList ids;
- //sort all the channels by title before output
- for(int i=0; i<urls.length(); i++){
- QString title = hash[urls[i]].title;
- if(title.isEmpty()){ title = "ZZZ"; } //put currently-invalid ones at the end of the list
- ids << title+" : "+hash[urls[i]].originalURL;
- }
- ids.sort();
- //Now strip off all the titles again to just get the IDs
- for(int i=0; i<ids.length(); i++){
- ids[i] = ids[i].section(" : ",-1);
- }
- return ids;
-}
-
-RSSchannel RSSReader::dataForID(QString ID){
- QString key = keyForUrl(ID);
- if(hash.contains(key)){ return hash[key]; }
- else{ return RSSchannel(); }
-}
-
-//Initial setup
-void RSSReader::addUrls(QStringList urls){
- //qDebug() << "Add URLS:" << urls;
- for(int i=0; i<urls.length(); i++){
- //Note: Make sure we get the complete URL form for accurate comparison later
- QString url = QUrl(urls[i]).toString();
- QString key = keyForUrl(url);
- if(hash.contains(key)){ continue; } //already handled
- RSSchannel blank;
- blank.originalURL = url;
- hash.insert(url, blank); //put the empty struct into the hash for now
- requestRSS(url); //startup the initial request for this url
- }
- emit newChannelsAvailable();
-}
-
-void RSSReader::removeUrl(QString ID){
- QString key = keyForUrl(ID);
- if(hash.contains(key)){ hash.remove(key); }
- emit newChannelsAvailable();
-}
-
-//=================
-// PUBLIC SLOTS
-//=================
-void RSSReader::syncNow(){
- QStringList urls = hash.keys();
- for(int i=0; i<urls.length(); i++){
- requestRSS(hash[urls[i]].originalURL);
- }
-}
-
-//=================
-// PRIVATE
-//=================
-QString RSSReader::keyForUrl(QString url){
- //get current hash key for this URL
- QStringList keys = hash.keys();
- if(keys.contains(url)){ return url; } //this is already a valid key
- for(int i=0; i<keys.length(); i++){
- if(hash[keys[i]].originalURL == url){ return keys[i]; } //this was an original URL
- }
- return "";
-}
-
-void RSSReader::requestRSS(QString url){
- if(!outstandingURLS.contains(url)){
- //qDebug() << "Request URL:" << url;
- NMAN->get( QNetworkRequest( QUrl(url) ) );
- outstandingURLS << url;
- }
-}
-
-//RSS parsing functions
-RSSchannel RSSReader::readRSS(QByteArray bytes){
- //Note: We could expand this later to support multiple "channel"s per Feed
- // but it seems like there is normally only one channel anyway
- //qDebug() << "Read RSS:" << bytes.left(100);
- QXmlStreamReader xml(bytes);
- RSSchannel rssinfo;
- //qDebug() << "Can Read XML Stream:" << !xml.hasError();
- if(xml.readNextStartElement()){
- //qDebug() << " - RSS Element:" << xml.name();
- if(xml.name() == "rss" && (xml.attributes().value("version") =="2.0" || xml.attributes().value("version") =="0.91") ){
- while(xml.readNextStartElement()){
- //qDebug() << " - RSS Element:" << xml.name();
- if(xml.name()=="channel"){ rssinfo = readRSSChannel(&xml); }
- else{ xml.skipCurrentElement(); }
- }
- }
- }
- if(xml.hasError()){ qDebug() << " - XML Read Error:" << xml.errorString() << "\n" << bytes; }
- return rssinfo;
-}
-RSSchannel RSSReader::readRSSChannel(QXmlStreamReader *rss){
- RSSchannel info;
- info.timetolive = -1;
- while(rss->readNextStartElement()){
- //qDebug() << " - RSS Element (channel):" <<rss->name();
- if(rss->name()=="item"){ info.items << readRSSItem(rss); }
- else if(rss->name()=="title"){ info.title = rss->readElementText(); }
- else if(rss->name()=="link"){
- QString txt = rss->readElementText();
- if(!txt.isEmpty()){ info.link = txt; }
- }
- else if(rss->name()=="description"){ info.description = rss->readElementText(); }
- else if(rss->name()=="lastBuildDate"){ info.lastBuildDate = RSSDateTime(rss->readElementText()); }
- else if(rss->name()=="pubDate"){ info.lastPubDate = RSSDateTime(rss->readElementText()); }
- else if(rss->name()=="image"){ readRSSImage(&info, rss); }
- //else if(rss->name()=="skipHours"){ info.link = rss->readElementText(); }
- //else if(rss->name()=="skipDays"){ info.link = rss->readElementText(); }
- else if(rss->name()=="ttl"){ info.timetolive = rss->readElementText().toInt(); }
- else{ rss->skipCurrentElement(); }
- }
- return info;
-}
-
-RSSitem RSSReader::readRSSItem(QXmlStreamReader *rss){
- RSSitem item;
- while(rss->readNextStartElement()){
- //qDebug() << " - RSS Element (Item):" << rss->name();
- if(rss->name()=="title"){ item.title = rss->readElementText(); }
- else if(rss->name()=="link"){ item.link = rss->readElementText(); }
- else if(rss->name()=="description"){ item.description = rss->readElementText(); }
- else if(rss->name()=="comments"){ item.comments_url = rss->readElementText(); }
- else if(rss->name()=="author"){
- //Special handling - this field can contain both email and name
- QString raw = rss->readElementText();
- if(raw.contains("@")){
- item.author_email = raw.split(" ").filter("@").first();
- item.author = raw.remove(item.author_email).remove("(").remove(")").simplified(); //the name is often put within parentheses after the email
- }else{ item.author = raw; }
- }
- else if(rss->name()=="guid"){ item.guid = rss->readElementText(); }
- else if(rss->name()=="pubDate"){ item.pubdate = RSSDateTime(rss->readElementText()); }
- else{ rss->skipCurrentElement(); }
- }
- return item;
-}
-
-void RSSReader::readRSSImage(RSSchannel *item, QXmlStreamReader *rss){
- while(rss->readNextStartElement()){
- //qDebug() << " - RSS Element (Image):" << rss->name();
- if(rss->name()=="url"){ item->icon_url = rss->readElementText(); }
- else if(rss->name()=="title"){ item->icon_title = rss->readElementText(); }
- else if(rss->name()=="link"){ item->icon_link = rss->readElementText(); }
- else if(rss->name()=="width"){ item->icon_size.setWidth(rss->readElementText().toInt()); }
- else if(rss->name()=="height"){ item->icon_size.setHeight(rss->readElementText().toInt()); }
- else if(rss->name()=="description"){ item->icon_description = rss->readElementText(); }
- }
- //Go ahead and kick off the request for the icon
- if(!item->icon_url.isEmpty()){ requestRSS(item->icon_url); }
-}
-
-QDateTime RSSReader::RSSDateTime(QString datetime){
- return QDateTime::fromString(datetime, Qt::RFC2822Date);
-}
-
-//=================
-// PRIVATE SLOTS
-//=================
-void RSSReader::replyFinished(QNetworkReply *reply){
- QString url = reply->request().url().toString();
- //qDebug() << "Got Reply:" << url;
- QString key = keyForUrl(url); //current hash key for this URL
- QByteArray data = reply->readAll();
- outstandingURLS.removeAll(url);
- if(data.isEmpty()){
- //qDebug() << "No data returned:" << url;
- //see if the URL can be adjusted for known issues
- bool handled = false;
- QUrl redirecturl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
- if(redirecturl.isValid() && (redirecturl.toString() != url )){
- //New URL redirect - make the change and send a new request
- QString newurl = redirecturl.toString();
- //qDebug() << " - Redirect to:" << newurl;
- if(hash.contains(key) && !hash.contains(newurl)){
- hash.insert(newurl, hash.take(key) ); //just move the data over to the new url
- requestRSS(newurl);
- emit newChannelsAvailable();
- handled = true;
- }
- }
- if(!handled && hash.contains(key) ){
- emit rssChanged(hash[key].originalURL);
- }
- return;
- }
-
- if(!hash.contains(key)){
- //qDebug() << " - hash does not contain URL:" << url;
- //URL removed from list while a request was outstanding?
- //Could also be an icon fetch response
- QStringList keys = hash.keys();
- for(int i=0; i<keys.length(); i++){
- //qDebug() << " - Check for icon URL:" << hash[keys[i]].icon_url;
- if(hash[keys[i]].icon_url.toLower() == url.toLower()){ //needs to be case-insensitive
- //Icon fetch response
- RSSchannel info = hash[keys[i]];
- QImage img = QImage::fromData(data);
- info.icon = QIcon( QPixmap::fromImage(img) );
- //qDebug() << "Got Icon response:" << url << info.icon;
- hash.insert(keys[i], info); //insert back into the hash
- emit rssChanged( hash[keys[i]].originalURL );
- break;
- }
- }
- reply->deleteLater();
- }else{
- //RSS reply
- RSSchannel info = readRSS(data); //QNetworkReply can be used as QIODevice
- reply->deleteLater(); //clean up
- //Validate the info and announce any changes
- if(info.title.isEmpty() || info.link.isEmpty() || info.description.isEmpty()){
- qDebug() << "Missing XML Information:" << url << info.title << info.link << info.description;
- return;
- } //bad info/read
- //Update the bookkeeping elements of the info
- if(info.timetolive<=0){ info.timetolive = LSession::handle()->DesktopPluginSettings()->value(setprefix+"default_interval_minutes", 60).toInt(); }
- if(info.timetolive <=0){ info.timetolive = 60; } //error in integer conversion from settings?
- info.lastsync = QDateTime::currentDateTime(); info.nextsync = info.lastsync.addSecs(info.timetolive * 60);
- //Now see if anything changed and save the info into the hash
- bool changed = (hash[key].lastBuildDate.isNull() || (hash[key].lastBuildDate < info.lastBuildDate) );
- bool newinfo = false;
- if(changed){ newinfo = hash[key].title.isEmpty(); } //no previous info from this URL
- info.originalURL = hash[key].originalURL; //make sure this info gets preserved across updates
- if(!hash[key].icon.isNull()){ info.icon = hash[key].icon; } //copy over the icon from the previous reply
- hash.insert(key, info);
- if(newinfo){ emit newChannelsAvailable(); } //new channel
- else if(changed){ emit rssChanged(info.originalURL); } //update to existing channel
- }
-}
-
-void RSSReader::sslErrors(QNetworkReply *reply, const QList<QSslError> &errors){
- int ok = 0;
- qDebug() << "SSL Errors Detected (RSS Reader):" << reply->url();
- for(int i=0; i<errors.length(); i++){
- if(errors[i].error()==QSslError::SelfSignedCertificate || errors[i].error()==QSslError::SelfSignedCertificateInChain){ ok++; }
- else{ qDebug() << "Unhandled SSL Error:" << errors[i].errorString(); }
- }
- if(ok==errors.length()){ qDebug() << " - Permitted:" << reply->url(); reply->ignoreSslErrors(); }
- else{ qDebug() << " - Denied:" << reply->url(); }
-}
-
-void RSSReader::checkTimes(){
- if(LSession::handle()->DesktopPluginSettings()->value(setprefix+"manual_sync_only", false).toBool()){ return; }
- QStringList urls = hash.keys();
- QDateTime cdt = QDateTime::currentDateTime();
- for(int i=0; i<urls.length(); i++){
- if(hash[urls[i]].nextsync < cdt){ requestRSS(urls[i]); }
- }
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSObjects.h b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSObjects.h
deleted file mode 100644
index 3069bf8d..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/rssreader/RSSObjects.h
+++ /dev/null
@@ -1,105 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2016, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_DESKTOP_RSS_READER_PLUGIN_OBJECT_H
-#define _LUMINA_DESKTOP_RSS_READER_PLUGIN_OBJECT_H
-
-#include <QNetworkAccessManager>
-#include <QNetworkReply>
-#include <QString>
-#include <QDateTime>
-#include <QList>
-#include <QIcon>
-#include <QTimer>
-#include <QXmlStreamReader> //Contained in the Qt "core" module - don't need the full "xml" module for this
-#include <QSslError>
-
-struct RSSitem{
- //Required Fields
- QString title, link, description;
-
- //Optional Fields
- QString comments_url, author_email, author, guid;
- QDateTime pubdate; //when the item was published
- //IGNORED INFO from RSS2 spec: "category", "source", "enclosure"
-};
-
-struct RSSchannel{
- //Required fields
- QString title, link, description;
-
- //Optional Fields
- QDateTime lastBuildDate, lastPubDate; //last build/publish dates
- // - channel refresh information
- int timetolive; //in minutes - time until next sync should be performed
- //QList<int> skiphours;
- //QStringList skipdays;
- // - icon info
- QIcon icon;
- QString icon_url, icon_title, icon_link, icon_description;
- QSize icon_size;
- //All items within this channel
- QList<RSSitem> items;
-
- //Optional RSS2 elements ignored:
- // "cloud", "textInput", "rating", "language", "copyright", "managingEditor", "webMaster",
- // "category", "generator", "docs"
-
- //Internal data for bookkeeping
- QDateTime lastsync, nextsync;
- QString originalURL; //in case it was redirected to some "fixed" url later
-};
-
-class RSSReader : public QObject{
- Q_OBJECT
-public:
- RSSReader(QObject *parent, QString settingsPrefix);
- ~RSSReader();
-
- //Information retrieval
- QStringList channels(); //returns all ID's
- RSSchannel dataForID(QString ID);
-
- //Initial setup
- void addUrls(QStringList urls);
- void removeUrl(QString ID);
-
-public slots:
- void syncNow(); //not generally needed
-
-private:
- //Internal data objects
- QHash<QString, RSSchannel> hash; // ID/data
- QString setprefix;
- QTimer *syncTimer;
- QNetworkAccessManager *NMAN;
- QStringList outstandingURLS;
-
-
- //Simple hash data search functions
- QString keyForUrl(QString url);
-
- //Network request function
- void requestRSS(QString url);
-
- //RSS parsing functions
- RSSchannel readRSS(QByteArray bytes);
- RSSchannel readRSSChannel(QXmlStreamReader *rss);
- RSSitem readRSSItem(QXmlStreamReader *rss);
- void readRSSImage(RSSchannel *item, QXmlStreamReader *rss);
- QDateTime RSSDateTime(QString datetime);
-
-private slots:
- void replyFinished(QNetworkReply *reply);
- void sslErrors(QNetworkReply *reply, const QList<QSslError> &errors);
- void checkTimes();
-
-signals:
- void rssChanged(QString); //ID
- void newChannelsAvailable();
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/systemmonitor/MonitorWidget.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/systemmonitor/MonitorWidget.cpp
deleted file mode 100644
index 951bcc98..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/systemmonitor/MonitorWidget.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "MonitorWidget.h"
-#include "ui_MonitorWidget.h"
-
-
-#include <LuminaXDG.h>
-#include <LuminaOS.h>
-
-MonitorWidget::MonitorWidget(QWidget *parent) : QWidget(parent), ui(new Ui::MonitorWidget()){
- ui->setupUi(this); //load the designer form
- upTimer = new QTimer(this);
- upTimer->setInterval(2000); //update every 2 seconds
- connect(upTimer, SIGNAL(timeout()), this, SLOT(UpdateStats()) );
- LoadIcons();
- upTimer->start();
-}
-
-MonitorWidget::~MonitorWidget(){
- //qDebug() << "Removing MonitorWidget";
-}
-
-void MonitorWidget::LoadIcons(){
- ui->tabWidget->setTabIcon(0,LXDG::findIcon("appointment-recurring","") ); //Summary
- ui->tabWidget->setTabIcon(1,LXDG::findIcon("drive-harddisk","") ); //Disk Usage
- //ui->tabWidget->setTabIcon(1,LXDG::findIcon("cpu","") ); //CPU Log
- //ui->tabWidget->setTabIcon(2,LXDG::findIcon("media-flash-memory-stick","") ); //Mem Log
-}
-
-void MonitorWidget::UpdateStats(){
- //qDebug() << "Updating System statistics...";
- ui->label_temps->setText( LOS::CPUTemperatures().join(", ") );
- if(ui->progress_cpu->isEnabled()){
- int perc = LOS::CPUUsagePercent();
- ui->progress_cpu->setValue(perc);
- if(perc<0){ ui->progress_cpu->setEnabled(false); } //disable this for future checks
- }
- if(ui->progress_mem->isEnabled()){
- int perc = LOS::MemoryUsagePercent();
- ui->progress_mem->setValue(perc);
- if(perc<0){ ui->progress_mem->setEnabled(false); } //disable this for future checks
- }
- ui->label_diskinfo->setText( LOS::DiskUsage().join("\n") );
- //Also perform/update the logs as necessary
- // -- TO DO --
-}
-
-SysMonitorPlugin::SysMonitorPlugin(QWidget *parent, QString ID) : LDPlugin(parent, ID){
- monitor = new MonitorWidget(this);
- this->setLayout( new QVBoxLayout() );
- this->layout()->setContentsMargins(0,0,0,0);
- this->layout()->addWidget(monitor);
-
- //this->setInitialSize(monitor->sizeHint().width(),monitor->sizeHint().height());
-}
-
-SysMonitorPlugin::~SysMonitorPlugin(){
- //qDebug() << "Remove SysMonitorPlugin";
-} \ No newline at end of file
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/systemmonitor/MonitorWidget.h b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/systemmonitor/MonitorWidget.h
deleted file mode 100644
index 618ac8f4..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/systemmonitor/MonitorWidget.h
+++ /dev/null
@@ -1,62 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This plugin is a simple hardware status monitor on the desktop
-//===========================================
-#ifndef _LUMINA_DESKTOP_PLUGIN_HW_MONITOR_WIDGET_H
-#define _LUMINA_DESKTOP_PLUGIN_HW_MONITOR_WIDGET_H
-
-#include <QTimer>
-#include <QWidget>
-
-#include "../LDPlugin.h"
-
-namespace Ui{
- class MonitorWidget;
-};
-
-class MonitorWidget : public QWidget{
- Q_OBJECT
-public:
- MonitorWidget(QWidget *parent = 0);
- ~MonitorWidget();
-
-public slots:
- void LoadIcons();
-
-private:
- Ui::MonitorWidget *ui;
- QTimer *upTimer;
-
-private slots:
- void UpdateStats();
-};
-
-// Wrapper class to put this into a desktop plugin container
-class SysMonitorPlugin : public LDPlugin{
- Q_OBJECT
-public:
- SysMonitorPlugin(QWidget* parent, QString ID);
- ~SysMonitorPlugin();
-
- virtual QSize defaultPluginSize(){
- // The returned QSize is in grid points (typically 100 or 200 pixels square)
- return QSize(3,2);
- }
-
-private:
- MonitorWidget *monitor;
-
-public slots:
- void LocaleChange(){
- QTimer::singleShot(0,monitor, SLOT(LoadIcons()));
- }
- void ThemeChange(){
- QTimer::singleShot(0,monitor, SLOT(LoadIcons()));
- }
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/systemmonitor/MonitorWidget.ui b/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/systemmonitor/MonitorWidget.ui
deleted file mode 100644
index 8798bc25..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/desktop-plugins/systemmonitor/MonitorWidget.ui
+++ /dev/null
@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>MonitorWidget</class>
- <widget class="QWidget" name="MonitorWidget">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>300</width>
- <height>122</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Form</string>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <property name="leftMargin">
- <number>2</number>
- </property>
- <property name="topMargin">
- <number>2</number>
- </property>
- <property name="rightMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>2</number>
- </property>
- <item>
- <widget class="QTabWidget" name="tabWidget">
- <property name="currentIndex">
- <number>0</number>
- </property>
- <widget class="QWidget" name="tab_summary">
- <attribute name="title">
- <string>Summary</string>
- </attribute>
- <layout class="QFormLayout" name="formLayout">
- <item row="0" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>CPU Temp:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="label_temps">
- <property name="text">
- <string notr="true"/>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>CPU Usage:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QProgressBar" name="progress_cpu">
- <property name="value">
- <number>0</number>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Mem Usage:</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QProgressBar" name="progress_mem">
- <property name="value">
- <number>0</number>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="tab_disks">
- <attribute name="title">
- <string>Disk I/O</string>
- </attribute>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QScrollArea" name="scrollArea">
- <property name="frameShape">
- <enum>QFrame::NoFrame</enum>
- </property>
- <property name="widgetResizable">
- <bool>true</bool>
- </property>
- <widget class="QWidget" name="scrollAreaWidgetContents">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>292</width>
- <height>89</height>
- </rect>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <widget class="QLabel" name="label_diskinfo">
- <property name="text">
- <string notr="true"/>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/LPPlugin.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/LPPlugin.h
deleted file mode 100644
index c4c76297..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/LPPlugin.h
+++ /dev/null
@@ -1,77 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This class is the generic container layout for all panel plugins
-// Simply subclass this when creating a new plugin to enable correct
-// visibility and usage within a panel
-//===========================================
-#ifndef _LUMINA_DESKTOP_PANEL_PLUGIN_H
-#define _LUMINA_DESKTOP_PANEL_PLUGIN_H
-
-#include <QObject>
-#include <QWidget>
-#include <QString>
-#include <QBoxLayout>
-#include <QApplication>
-
-class LPPlugin : public QWidget{
- Q_OBJECT
-
-private:
- QBoxLayout *LY;
- QString plugintype;
-
-public:
- LPPlugin(QWidget *parent = 0, QString ptype="unknown", bool horizontal = true) : QWidget(parent){
- plugintype=ptype;
- this->setContentsMargins(1,1,1,1);
- this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
- this->setFocusPolicy(Qt::NoFocus); //no keyboard focus on the panel/plugins
- if(horizontal){LY = new QBoxLayout(QBoxLayout::LeftToRight, this); }
- else{ LY = new QBoxLayout(QBoxLayout::TopToBottom, this); }
- this->setObjectName(ptype.section("---",0,0));
- LY->setContentsMargins(0,0,0,0);
- LY->setSpacing(1);
- this->setLayout(LY);
- connect(QApplication::instance(), SIGNAL(LocaleChanged()), this, SLOT(LocaleChange()) );
- connect(QApplication::instance(), SIGNAL(IconThemeChanged()), this, SLOT(ThemeChange()) );
- }
-
- ~LPPlugin(){
- }
-
- QBoxLayout* layout(){
- return LY;
- }
-
- QString type(){
- return plugintype;
- }
-
- virtual void AboutToClose(){
- //This needs to be re-implemented in the subclasses plugin
- //This is for any last-minute cleanup before the plugin gets deleted
- }
-
-public slots:
- virtual void LocaleChange(){
- //This needs to be re-implemented in the subclassed plugin
- //This is where all text is set/translated
- }
- virtual void ThemeChange(){
- //This needs to be re-implemented in the subclasses plugin
- //This is where all the visuals are set if using Theme-dependant icons.
- }
- virtual void OrientationChange(){
- //This needs to be re-implemented in the subclasses plugin
- //This is where any horizontal/vertical orientations can be changed appropriately
- }
-
-signals:
- void MenuClosed(); //This needs to be emitted when any plugin's menu is closed for some reason (check/set focus properly)
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/LTBWidget.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/LTBWidget.h
deleted file mode 100644
index 560e5811..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/LTBWidget.h
+++ /dev/null
@@ -1,71 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2013, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_TOOLBAR_WIDGET_H
-#define _LUMINA_TOOLBAR_WIDGET_H
-
-#include <QToolButton>
-#include <QEvent>
-#include <QWheelEvent>
-
-#include "Globals.h"
-#include <LuminaX11.h>
-
-class LTBWidget : public QToolButton{
- Q_OBJECT
-
-private:
- LXCB::WINDOWVISIBILITY cstate;
- //QString rawstyle;
- void updateBackground(){
- //QString background = "background: transparent; "; //default value
- //QString border = "border: 1px solid transparent;";
- if(cstate == LXCB::IGNORE){ this->setObjectName(""); } //just use the defaults
- else if(cstate == LXCB::VISIBLE){ this->setObjectName("WindowVisible"); }//background = "background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(255, 255, 255, 240), stop:0.505682 rgba(240, 240, 240, 150), stop:1 rgba(210, 210, 210, 55));"; border="border: 1px solid transparent;"; }
- else if(cstate == LXCB::INVISIBLE){this->setObjectName("WindowInvisible"); } //background = "background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(215, 215, 215, 240), stop:0.505682 rgba(184, 185, 186, 150), stop:1 rgba(221, 246, 255, 55));"; border="border: 1px solid transparent;"; }
- else if(cstate == LXCB::ACTIVE){ this->setObjectName("WindowActive"); }//background= "background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(241, 233, 156, 240), stop:0.355682 rgba(255, 243, 127, 150), stop:1 rgba(221, 246, 255, 55));"; border ="border: 1px solid transparent;"; }
- else if(cstate == LXCB::ATTENTION){ this->setObjectName("WindowAttention"); }//background= "background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(252, 187, 127, 240), stop:0.505682 rgba(255, 222, 197, 150), stop:1 rgba(221, 246, 255, 55));"; border="border: 1px solid transparent;"; }
- this->setStyleSheet(""); //force the object to re-evaluate the current theme stylesheet and update visuals
- //QString raw = rawstyle;
- //this->setStyleSheet( raw.replace("%1",background).replace("%2", border) );
- }
-
-signals:
-
- void wheelScroll(int change);
-
-public:
- LTBWidget(QWidget* parent) : QToolButton(parent){
- //this->setStyleSheet( this->styleSheet()+" LTBWidget::menu-indicator{image: none;}");
- cstate = LXCB::IGNORE;
-
- this->setPopupMode(QToolButton::InstantPopup);
- this->setAutoRaise(true);
-
- //rawstyle = "LTBWidget{ %1 %2 border-radius: 5px;} LTBWidget::menu-indicator{image: none;} LTBWidget::hover{ %1 border: 1px solid black; border-radius: 5px; } LTBWidget::menu-button{ background: transparent; width: 15px; } LTBWidget[popupMode=\"1\"]{%1 %2 border-radius: 5px; padding-right: 15px;} LTBWidget[popupMode=\"1\"]::hover{%1 border: 1px solid black; border-radius: 5px; padding-right: 15px}";
- updateBackground();
- }
-
- ~LTBWidget(){
- }
-
- void setState(LXCB::WINDOWVISIBILITY newstate){
- cstate = newstate;
- updateBackground();
- }
-
-public slots:
-
-
-protected:
- void wheelEvent(QWheelEvent *event){
- int change = event->delta()/120; // 1/15th of a rotation (delta/120) is usually one "click" of the wheel
- emit wheelScroll(change);
- }
-
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/NewPP.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/NewPP.h
deleted file mode 100644
index 3a5f6a5b..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/NewPP.h
+++ /dev/null
@@ -1,82 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This class is the interface to load all the different panel plugins
-//===========================================
-#ifndef _LUMINA_DESKTOP_NEW_PANEL_PLUGIN_H
-#define _LUMINA_DESKTOP_NEW_PANEL_PLUGIN_H
-
-#include <QDebug>
-
-//List all the individual plugin includes here
-#include "LPPlugin.h"
-#include "userbutton/LUserButton.h"
-#include "desktopbar/LDeskBar.h"
-#include "spacer/LSpacer.h"
-#include "line/LLine.h"
-#include "clock/LClock.h"
-#include "battery/LBattery.h"
-#include "desktopswitcher/LDesktopSwitcher.h"
-#include "taskmanager/LTaskManagerPlugin.h"
-#include "systemdashboard/LSysDashboard.h"
-#include "showdesktop/LHomeButton.h"
-#include "appmenu/LAppMenuPlugin.h"
-#include "applauncher/AppLaunchButton.h"
-#include "systemstart/LStartButton.h"
-#include "audioplayer/LPAudioPlayer.h"
-#include "jsonmenu/PPJsonMenu.h"
-//#include "quickcontainer/QuickPPlugin.h"
-#include "systemtray/LSysTray.h" //must be last due to X11 compile issues
-
-
-class NewPP{
-public:
- static LPPlugin* createPlugin(QString plugin, QWidget* parent = 0, bool horizontal = true){
- LPPlugin *plug = 0;
- if(plugin.startsWith("userbutton---")){
- plug = new LUserButtonPlugin(parent, plugin, horizontal);
- }else if(plugin.startsWith("homebutton---")){
- plug = new LHomeButtonPlugin(parent, plugin, horizontal);
- }else if(plugin.startsWith("desktopbar---")){
- plug = new LDeskBarPlugin(parent, plugin, horizontal);
- }else if(plugin.startsWith("spacer---")){
- plug = new LSpacerPlugin(parent, plugin, horizontal);
- }else if(plugin.startsWith("line---")){
- plug = new LLinePlugin(parent, plugin, horizontal);
- }else if(plugin.startsWith("taskmanager")){
- //This one can be "taskmanager[-nogroups]---"
- plug = new LTaskManagerPlugin(parent, plugin, horizontal);
- }else if(plugin.startsWith("systemtray---")){
- plug = new LSysTray(parent, plugin, horizontal);
- }else if(plugin.startsWith("desktopswitcher---")){
- plug = new LDesktopSwitcher(parent, plugin, horizontal);
- }else if(plugin.startsWith("battery---") && LOS::hasBattery()){
- plug = new LBattery(parent, plugin, horizontal);
- }else if(plugin.startsWith("clock---")){
- plug = new LClock(parent, plugin, horizontal);
- }else if(plugin.startsWith("systemdashboard---")){
- plug = new LSysDashboard(parent, plugin, horizontal);
- }else if(plugin.startsWith("appmenu---")){
- plug = new LAppMenuPlugin(parent, plugin, horizontal);
- }else if(plugin.startsWith("systemstart---")){
- plug = new LStartButtonPlugin(parent, plugin, horizontal);
- }else if(plugin.startsWith("audioplayer---")){
- plug = new LPAudioPlayer(parent, plugin, horizontal);
- }else if(plugin.section("::::",0,0)=="jsonmenu" && plugin.split("::::").length()>=3 ){
- plug = new LPJsonMenu(parent, plugin, horizontal);
- }else if(plugin.section("---",0,0).section("::",0,0)=="applauncher"){
- plug = new AppLaunchButtonPlugin(parent, plugin, horizontal);
- //}else if( plugin.section("---",0,0).startsWith("quick-") && LUtils::validQuickPlugin(plugin.section("---",0,0)) ){
- //plug = new QuickPPlugin(parent, plugin, horizontal);
- }else{
- qWarning() << "Invalid Panel Plugin:"<<plugin << " -- Ignored";
- }
- return plug;
- }
-
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/RotateToolButton.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/RotateToolButton.h
deleted file mode 100644
index 1c8085f6..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/RotateToolButton.h
+++ /dev/null
@@ -1,58 +0,0 @@
-//===========================================
-// Lumina Desktop source code
-// Copyright (c) 2016, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This is a simple subclass of a QToolButton so it can
-// provice text rotated vertically as needed
-//===========================================
-#ifndef _LUMINA_DESKTOP_ROTATE_TOOLBUTTON_H
-#define _LUMINA_DESKTOP_ROTATE_TOOLBUTTON_H
-
-#include <QStylePainter>
-#include <QStyleOptionToolButton>
-#include <QToolButton>
-#include <QTransform>
-
-class RotateToolButton : public QToolButton{
- Q_OBJECT
-
-private:
- int rotate_degrees;
- void paintEvent(QPaintEvent*){
- /* NOTE: This is what a standard QToolButton performs (peeked at Qt source code for this tidbit)
- QStylePainter p(this);
- QStyleOptionToolButton opt;
- initStyleOption(&opt);
- p.drawComplexControl(QStyle::CC_ToolButton, opt);
- */
- QStylePainter p(this);
- QStyleOptionToolButton opt;
- initStyleOption(&opt);
- //Apply the rotation matrix to the painter before starting the paint
- QTransform trans = QTransform( p.transform() ).rotate(rotate_degrees);
- p.setTransform(trans, false); //merging already taken care of
- //Now do the normal painting procedure
- p.drawComplexControl(QStyle::CC_ToolButton, opt);
- }
-
-public:
- RotateToolButton(QWidget *parent = Q_NULLPTR) : QToolButton(parent){
- rotate_degrees = 0; //no rotation initially
- }
-
- void setRotation(int degrees){
- rotate_degrees = degrees;
- this->update(); //trigger a paint event
- }
-
- /*virtual void setText(QString text){
- this->setText(text);
- if(rotate_degrees !=0){
- this->setSizeHint( this->sizeHint()
- }
- }*/
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/applauncher/AppLaunchButton.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/applauncher/AppLaunchButton.cpp
deleted file mode 100644
index 1fd819b5..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/applauncher/AppLaunchButton.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "AppLaunchButton.h"
-#include "../../LSession.h"
-
-#include <LuminaXDG.h>
-#include <LUtils.h>
-#include <QInputDialog>
-
-AppLaunchButtonPlugin::AppLaunchButtonPlugin(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){
- button = new QToolButton(this);
- button->setAutoRaise(true);
- button->setToolButtonStyle(Qt::ToolButtonIconOnly);
- appfile = id.section("---",0,0).section("::",1,1);
- if(!QFile::exists(appfile) && appfile.endsWith(".desktop")){
- //might be a relative path - try to find the file
- appfile = LUtils::AppToAbsolute(appfile.section("/",-1) );
- }
- if(!QFile::exists(appfile)){ appfile.clear(); }
- connect(button, SIGNAL(clicked()), this, SLOT(AppClicked()));
- this->layout()->setContentsMargins(0,0,0,0);
- this->layout()->addWidget(button);
-
- QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes
-}
-
-AppLaunchButtonPlugin::~AppLaunchButtonPlugin(){
-
-}
-
-void AppLaunchButtonPlugin::updateButtonVisuals(){
- QIcon icon;
- QString tooltip = tr("Click to assign an application");
- if(appfile.endsWith(".desktop")){
- XDGDesktop desk(appfile);
- if(desk.isValid()){
- icon = LXDG::findIcon(desk.icon, "unknown");
- tooltip = QString(tr("Launch %1")).arg(desk.name);
- }else{
- icon = LXDG::findIcon("task-attention","");
- appfile.clear();
- }
- }else if(QFile::exists(appfile)){
- icon = LXDG::findMimeIcon(appfile.section("/",-1));
- tooltip = QString(tr("Open %1")).arg(appfile.section("/",-1));
- }else{
- icon = LXDG::findIcon("task-attention", "");
- }
- button->setIcon( icon );
- button->setToolTip(tooltip);
-}
-
-// ========================
-// PRIVATE FUNCTIONS
-// ========================
-void AppLaunchButtonPlugin::AppClicked(){
- if(appfile.isEmpty()){
- //No App File selected
- QList<XDGDesktop*> apps = LSession::handle()->applicationMenu()->currentAppHash()->value("All");
- QStringList names;
- for(int i=0; i<apps.length(); i++){ names << apps[i]->name; }
- bool ok = false;
- QString app = QInputDialog::getItem(this, tr("Select Application"), tr("Name:"), names, 0, false, &ok);
- if(!ok || names.indexOf(app)<0){ return; } //cancelled
- appfile = apps[ names.indexOf(app) ]->filePath;
- //Still need to find a way to set this value persistently
- // --- perhaps replace the plugin in the desktop settings file with the new path?
- // --- "applauncher::broken---<something>" -> "applauncher::fixed---<something>" ?
- QTimer::singleShot(0,this, SLOT(updateButtonVisuals()));
- }else{
- LSession::LaunchApplication("lumina-open \""+appfile+"\"");
- }
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/applauncher/AppLaunchButton.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/applauncher/AppLaunchButton.h
deleted file mode 100644
index 3aa3c7ad..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/applauncher/AppLaunchButton.h
+++ /dev/null
@@ -1,63 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This panel plugin is a simple button to launch a single application
-//===========================================
-#ifndef _LUMINA_DESKTOP_LAUNCH_APP_PANEL_PLUGIN_H
-#define _LUMINA_DESKTOP_LAUNCH_APP_PANEL_PLUGIN_H
-
-// Qt includes
-#include <QToolButton>
-#include <QString>
-#include <QWidget>
-
-
-// Lumina-desktop includes
-#include "../LPPlugin.h" //main plugin widget
-
-// libLumina includes
-#include "LuminaXDG.h"
-
-// PANEL PLUGIN BUTTON
-class AppLaunchButtonPlugin : public LPPlugin{
- Q_OBJECT
-
-public:
- AppLaunchButtonPlugin(QWidget *parent = 0, QString id = "applauncher", bool horizontal=true);
- ~AppLaunchButtonPlugin();
-
-private:
- QToolButton *button;
- QString appfile;
-
- void updateButtonVisuals();
-
-private slots:
- void AppClicked();
-
-public slots:
- void OrientationChange(){
- if(this->layout()->direction()==QBoxLayout::LeftToRight){
- this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
- button->setIconSize( QSize(this->height(), this->height()) );
- }else{
- this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
- button->setIconSize( QSize(this->width(), this->width()) );
- }
- this->layout()->update();
- updateButtonVisuals();
- }
-
- void LocaleChange(){
- updateButtonVisuals();
- }
-
- void ThemeChange(){
- updateButtonVisuals();
- }
-};
-
-#endif \ No newline at end of file
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/appmenu/LAppMenuPlugin.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/appmenu/LAppMenuPlugin.cpp
deleted file mode 100644
index e3be55c2..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/appmenu/LAppMenuPlugin.cpp
+++ /dev/null
@@ -1,142 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LAppMenuPlugin.h"
-#include "../../LSession.h"
-
-#include <LuminaXDG.h>
-
-LAppMenuPlugin::LAppMenuPlugin(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){
- button = new QToolButton(this);
- button->setAutoRaise(true);
- button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
- mainmenu = new QMenu(this);
- button->setMenu( mainmenu );
- button->setPopupMode(QToolButton::InstantPopup);
- this->layout()->setContentsMargins(0,0,0,0);
- this->layout()->addWidget(button);
-
- connect(mainmenu, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed()));
- connect(mainmenu, SIGNAL(triggered(QAction*)), this, SLOT(LaunchItem(QAction*)) );
- connect(LSession::handle()->applicationMenu(), SIGNAL(AppMenuUpdated()), this, SLOT(UpdateMenu()));
- QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes
- QTimer::singleShot(0,this, SLOT(UpdateMenu()) );
- //Setup the global shortcut handling for opening the start menu
- connect(QApplication::instance(), SIGNAL(StartButtonActivated()), this, SLOT(shortcutActivated()) );
- LSession::handle()->registerStartButton(this->type());
-}
-
-LAppMenuPlugin::~LAppMenuPlugin(){
-
-}
-
-void LAppMenuPlugin::updateButtonVisuals(){
- button->setToolTip( tr("Quickly launch applications or open files"));
- button->setText( tr("Applications") );
- //Use the TrueOS icon by default (or the Lumina icon for non-TrueOS systems)
- button->setIcon( LXDG::findIcon("start-here-lumina","Lumina-DE") );
-}
-
-// ========================
-// PRIVATE FUNCTIONS
-// ========================
-void LAppMenuPlugin::shortcutActivated(){
- if(LSession::handle()->registerStartButton(this->type())){
- if(button->menu()->isVisible()){ button->menu()->hide(); }
- else{ button->showMenu(); }
- }
-}
-
-void LAppMenuPlugin::LaunchItem(QAction* item){
- QString appFile = item->whatsThis();
- if(appFile.startsWith("internal::")){
- appFile = appFile.section("::",1,50); //cut off the "internal" flag
- if(appFile=="logout"){ LSession::handle()->systemWindow(); }
- }else if(!appFile.isEmpty()){
- LSession::LaunchApplication("lumina-open "+appFile);
- }
-}
-
-void LAppMenuPlugin::UpdateMenu(){
- mainmenu->clear();
- QHash<QString, QList<XDGDesktop*> > *HASH = LSession::handle()->applicationMenu()->currentAppHash();
- //Now Re-create the menu (orignally copied from the AppMenu class)
- //Add link to the file manager
- QAction *tmpact = mainmenu->addAction( LXDG::findIcon("user-home", ""), tr("Browse Files") );
- tmpact->setWhatsThis("\""+QDir::homePath()+"\"");
- //--Look for the app store
- XDGDesktop store(LOS::AppStoreShortcut());
- if(store.isValid()){
- tmpact = mainmenu->addAction( LXDG::findIcon(store.icon, ""), tr("Install Applications") );
- tmpact->setWhatsThis("\""+store.filePath+"\"");
- }
- //--Look for the control panel
- XDGDesktop controlp(LOS::ControlPanelShortcut());
- if(controlp.isValid()){
- tmpact = mainmenu->addAction( LXDG::findIcon(controlp.icon, ""), tr("Control Panel") );
- tmpact->setWhatsThis("\""+controlp.filePath+"\"");
- }
- mainmenu->addSeparator();
- //--Now create the sub-menus
- QStringList cats = HASH->keys();
- cats.sort(); //make sure they are alphabetical
- for(int i=0; i<cats.length(); i++){
- //Make sure they are translated and have the right icons
- QString name, icon;
- if(cats[i]=="All"){continue; } //skip this listing for the menu
- else if(cats[i] == "Multimedia"){ name = tr("Multimedia"); icon = "applications-multimedia"; }
- else if(cats[i] == "Development"){ name = tr("Development"); icon = "applications-development"; }
- else if(cats[i] == "Education"){ name = tr("Education"); icon = "applications-education"; }
- else if(cats[i] == "Game"){ name = tr("Games"); icon = "applications-games"; }
- else if(cats[i] == "Graphics"){ name = tr("Graphics"); icon = "applications-graphics"; }
- else if(cats[i] == "Network"){ name = tr("Network"); icon = "applications-internet"; }
- else if(cats[i] == "Office"){ name = tr("Office"); icon = "applications-office"; }
- else if(cats[i] == "Science"){ name = tr("Science"); icon = "applications-science"; }
- else if(cats[i] == "Settings"){ name = tr("Settings"); icon = "preferences-system"; }
- else if(cats[i] == "System"){ name = tr("System"); icon = "applications-system"; }
- else if(cats[i] == "Utility"){ name = tr("Utility"); icon = "applications-utilities"; }
- else if(cats[i] == "Wine"){ name = tr("Wine"); icon = "wine"; }
- else{ name = tr("Unsorted"); icon = "applications-other"; }
-
- QMenu *menu = new QMenu(name, this);
- menu->setIcon(LXDG::findIcon(icon,""));
- QList<XDGDesktop*> appL = HASH->value(cats[i]);
- for( int a=0; a<appL.length(); a++){
- if(appL[a]->actions.isEmpty()){
- //Just a single entry point - no extra actions
- QAction *act = new QAction(LXDG::findIcon(appL[a]->icon, ""), appL[a]->name, menu);
- act->setToolTip(appL[a]->comment);
- act->setWhatsThis("\""+appL[a]->filePath+"\"");
- menu->addAction(act);
- }else{
- //This app has additional actions - make this a sub menu
- // - first the main menu/action
- QMenu *submenu = new QMenu(appL[a]->name, menu);
- submenu->setIcon( LXDG::findIcon(appL[a]->icon,"") );
- //This is the normal behavior - not a special sub-action (although it needs to be at the top of the new menu)
- QAction *act = new QAction(LXDG::findIcon(appL[a]->icon, ""), appL[a]->name, submenu);
- act->setToolTip(appL[a]->comment);
- act->setWhatsThis(appL[a]->filePath);
- submenu->addAction(act);
- //Now add entries for every sub-action listed
- for(int sa=0; sa<appL[a]->actions.length(); sa++){
- QAction *sact = new QAction(LXDG::findIcon(appL[a]->actions[sa].icon, appL[a]->icon), appL[a]->actions[sa].name, this);
- sact->setToolTip(appL[a]->comment);
- sact->setWhatsThis("-action \""+appL[a]->actions[sa].ID+"\" \""+appL[a]->filePath+"\"");
- submenu->addAction(sact);
- }
- menu->addMenu(submenu);
- }
- }//end loop over apps within this category
- mainmenu->addMenu(menu);
- } //end loop over categories
- //Now add any logout options
- mainmenu->addSeparator();
- //QMenu *tmpmenu = mainmenu->addMenu(LXDG::findIcon("system-log-out",""), tr("Leave"));
- tmpact =mainmenu->addAction(LXDG::findIcon("system-log-out"),tr("Leave"));
- tmpact->setWhatsThis("internal::logout");
-
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/appmenu/LAppMenuPlugin.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/appmenu/LAppMenuPlugin.h
deleted file mode 100644
index 659d781f..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/appmenu/LAppMenuPlugin.h
+++ /dev/null
@@ -1,64 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This panel plugin is a re-creation of the classic "start" menu
-//===========================================
-#ifndef _LUMINA_DESKTOP_APP_MENU_PANEL_PLUGIN_H
-#define _LUMINA_DESKTOP_APP_MENU_PANEL_PLUGIN_H
-
-// Qt includes
-#include <QMenu>
-#include <QToolButton>
-#include <QString>
-#include <QWidget>
-
-
-// Lumina-desktop includes
-#include "../LPPlugin.h" //main plugin widget
-
-
-// PANEL PLUGIN BUTTON
-class LAppMenuPlugin : public LPPlugin{
- Q_OBJECT
-
-public:
- LAppMenuPlugin(QWidget *parent = 0, QString id = "appmenu", bool horizontal=true);
- ~LAppMenuPlugin();
-
-private:
- QToolButton *button;
- QMenu *mainmenu;
-
- void updateButtonVisuals();
-
-private slots:
- void shortcutActivated();
- void LaunchItem(QAction* item);
- void UpdateMenu();
-
-public slots:
- void OrientationChange(){
- if(this->layout()->direction()==QBoxLayout::LeftToRight){
- this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
- button->setIconSize( QSize(this->height(), this->height()) );
- }else{
- this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
- button->setIconSize( QSize(this->width(), this->width()) );
- }
- this->layout()->update();
- updateButtonVisuals();
- }
-
- void LocaleChange(){
- updateButtonVisuals();
- }
-
- void ThemeChange(){
- updateButtonVisuals();
- }
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/LPAudioPlayer.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/LPAudioPlayer.cpp
deleted file mode 100644
index 5669aaf5..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/LPAudioPlayer.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Susanne Jaeckel
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LPAudioPlayer.h"
-#include "LSession.h"
-
-LPAudioPlayer::LPAudioPlayer(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){
- //Setup the button
- button = new QToolButton(this);
- button->setAutoRaise(true);
- button->setToolButtonStyle(Qt::ToolButtonIconOnly);
- button->setPopupMode(QToolButton::InstantPopup); //make sure it runs the update routine first
- //connect(button, SIGNAL(clicked()), this, SLOT(openMenu()));
- this->layout()->setContentsMargins(0,0,0,0);
- this->layout()->addWidget(button);
- wact = new QWidgetAction(this);
- aplayer = new PPlayerWidget(this);
- button ->setMenu(new QMenu(this) );
- wact->setDefaultWidget(aplayer);
- button->menu()->addAction(wact);
- //Now start up the widgets
- button->setIcon( LXDG::findIcon("audio-volume-high","") );
- QTimer::singleShot(0,this,SLOT(OrientationChange()) ); //update the sizing/icon
-}
-
-LPAudioPlayer::~LPAudioPlayer(){
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/LPAudioPlayer.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/LPAudioPlayer.h
deleted file mode 100644
index e5132b1f..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/LPAudioPlayer.h
+++ /dev/null
@@ -1,49 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2016, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_PANEL_AUDIO_PLAYER_PLUGIN_H
-#define _LUMINA_PANEL_AUDIO_PLAYER_PLUGIN_H
-
-#include "../../Globals.h"
-#include "../LTBWidget.h"
-#include "../LPPlugin.h"
-#include "PPlayerWidget.h"
-
-class LPAudioPlayer : public LPPlugin{
- Q_OBJECT
-public:
- LPAudioPlayer(QWidget *parent = 0, QString id = "audioplayer", bool horizontal=true);
- ~LPAudioPlayer();
-
-private:
- QToolButton *button;
- QWidgetAction *wact;
- PPlayerWidget *aplayer;
-
- //int iconOld;
-
-private slots:
- //void updateBattery(bool force = false);
- //QString getRemainingTime();
-
-public slots:
- void LocaleChange(){
- //updateBattery(true);
- }
-
- void OrientationChange(){
- if(this->layout()->direction()==QBoxLayout::LeftToRight){
- this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
- button->setIconSize( QSize(this->height(), this->height()) );
- }else{
- this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
- button->setIconSize( QSize(this->width(), this->width()) );
- }
- this->layout()->update();
- }
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/PPlayerWidget.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/PPlayerWidget.cpp
deleted file mode 100644
index 023e20c7..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/PPlayerWidget.cpp
+++ /dev/null
@@ -1,258 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "PPlayerWidget.h"
-#include "ui_PPlayerWidget.h"
-
-#include <QDir>
-#include <QUrl>
-#include <QInputDialog>
-#include <QFileDialog>
-#include <LuminaXDG.h>
-#include <QDebug>
-#include <QDesktopWidget>
-
-PPlayerWidget::PPlayerWidget(QWidget *parent) : QWidget(parent), ui(new Ui::PPlayerWidget()){
- ui->setupUi(this); //load the designer form
- PLAYER = new QMediaPlayer(this);
- PLAYER->setVolume(100);
- PLAYER->setNotifyInterval(1000); //1 second interval (just needs to be a rough estimate)
- PLAYLIST = new QMediaPlaylist(this);
- PLAYLIST->setPlaybackMode(QMediaPlaylist::Sequential);
- PLAYER->setPlaylist(PLAYLIST);
-
- configMenu = new QMenu(this);
- ui->tool_config->setMenu(configMenu);
- addMenu = new QMenu(this);
- ui->tool_add->setMenu(addMenu);
-
- updatinglists = false; //start off as false
-
- ui->combo_playlist->setContextMenuPolicy(Qt::NoContextMenu);
-
- LoadIcons();
- playerStateChanged(); //update button visibility
- currentSongChanged();
- //Connect all the signals/slots
- //connect(infoTimer, SIGNAL(timeout()), this, SLOT(rotateTrackInfo()) );
- connect(PLAYER, SIGNAL(positionChanged(qint64)),this, SLOT(updateProgress(qint64)) );
- connect(PLAYER, SIGNAL(durationChanged(qint64)), this, SLOT(updateMaxProgress(qint64)) );
- connect(PLAYLIST, SIGNAL(mediaChanged(int, int)), this, SLOT(playlistChanged()) );
- connect(PLAYER, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(playerStateChanged()) );
- connect(PLAYLIST, SIGNAL(currentMediaChanged(const QMediaContent&)), this, SLOT(currentSongChanged()) );
- connect(ui->combo_playlist, SIGNAL(currentIndexChanged(int)), this, SLOT(userlistSelectionChanged()) );
- connect(ui->tool_play, SIGNAL(clicked()), this, SLOT(playClicked()) );
- connect(ui->tool_pause, SIGNAL(clicked()), this, SLOT(pauseClicked()) );
- connect(ui->tool_stop, SIGNAL(clicked()), this, SLOT(stopClicked()) );
- connect(ui->tool_next, SIGNAL(clicked()), this, SLOT(nextClicked()) );
- connect(ui->tool_prev, SIGNAL(clicked()), this, SLOT(prevClicked()) );
-
-}
-
-PPlayerWidget::~PPlayerWidget(){
- //qDebug() << "Removing PPlayerWidget";
-}
-
-void PPlayerWidget::LoadIcons(){
- ui->tool_stop->setIcon( LXDG::findIcon("media-playback-stop","") );
- ui->tool_play->setIcon( LXDG::findIcon("media-playback-start","") );
- ui->tool_pause->setIcon( LXDG::findIcon("media-playback-pause","") );
- ui->tool_next->setIcon( LXDG::findIcon("media-skip-forward","") );
- ui->tool_prev->setIcon( LXDG::findIcon("media-skip-backward","") );
- ui->tool_add->setIcon( LXDG::findIcon("list-add","") );
- ui->tool_config->setIcon( LXDG::findIcon("configure","") );
- //Now re-assemble the menus as well
- configMenu->clear();
- configMenu->addAction(LXDG::findIcon("media-eject",""), tr("Clear Playlist"), this, SLOT(ClearPlaylist()));
- configMenu->addAction(LXDG::findIcon("roll",""), tr("Shuffle Playlist"), this, SLOT(ShufflePlaylist()));
- addMenu->clear();
- addMenu->addAction(LXDG::findIcon("document-new",""), tr("Add Files"), this, SLOT(AddFilesToPlaylist()));
- addMenu->addAction(LXDG::findIcon("folder-new",""), tr("Add Directory"), this, SLOT(AddDirToPlaylist()));
- addMenu->addAction(LXDG::findIcon("download",""), tr("Add URL"), this, SLOT(AddURLToPlaylist()));
-}
-
-void PPlayerWidget::playClicked(){
- PLAYER->play();
-}
-
-void PPlayerWidget::pauseClicked(){
- PLAYER->pause();
-}
-
-void PPlayerWidget::stopClicked(){
- PLAYER->stop();
-}
-
-void PPlayerWidget::nextClicked(){
- PLAYLIST->next();
-}
-
-void PPlayerWidget::prevClicked(){
- PLAYLIST->previous();
-}
-
-void PPlayerWidget::AddFilesToPlaylist(){
- //Prompt the user to select multimedia files
- QFileDialog dlg(0, Qt::Dialog | Qt::WindowStaysOnTopHint );
- dlg.setFileMode(QFileDialog::ExistingFiles);
- dlg.setAcceptMode(QFileDialog::AcceptOpen);
- dlg.setNameFilter( tr("Multimedia Files")+" ("+LXDG::findAVFileExtensions().join(" ")+")");
- dlg.setWindowTitle(tr("Select Multimedia Files"));
- dlg.setWindowIcon( LXDG::findIcon("file-open","") );
- dlg.setDirectory(QDir::homePath()); //start in the home directory
- //ensure it is centered on the current screen
- QPoint center = QApplication::desktop()->screenGeometry(this).center();
- dlg.move( center.x()-(dlg.width()/2), center.y()-(dlg.height()/2) );
- dlg.show();
- while( dlg.isVisible() ){
- QApplication::processEvents();
- }
- QList<QUrl> files = dlg.selectedUrls();
- if(files.isEmpty() || dlg.result()!=QDialog::Accepted){ return; } //cancelled
- //Make this use show/processEvents later
- //QList<QUrl> files = QFileDialog::getOpenFileUrls(0, tr("Select Multimedia Files"), QDir::homePath(), "Multimedia Files ("+LXDG::findAVFileExtensions().join(" ")+")");
- QList<QMediaContent> urls;
- for(int i=0; i<files.length(); i++){
- urls << QMediaContent(files[i]);
- }
- PLAYLIST->addMedia(urls);
- playlistChanged();
-}
-
-void PPlayerWidget::AddDirToPlaylist(){
- QFileDialog dlg(0, Qt::Dialog | Qt::WindowStaysOnTopHint );
- dlg.setFileMode(QFileDialog::Directory);
- dlg.setOption(QFileDialog::ShowDirsOnly, true);
- dlg.setAcceptMode(QFileDialog::AcceptOpen);
- dlg.setWindowTitle(tr("Select Multimedia Directory"));
- dlg.setWindowIcon( LXDG::findIcon("folder-open","") );
- dlg.setDirectory(QDir::homePath()); //start in the home directory
- //ensure it is centered on the current screen
- QPoint center = QApplication::desktop()->screenGeometry(this).center();
- dlg.move( center.x()-(dlg.width()/2), center.y()-(dlg.height()/2) );
- dlg.show();
- while( dlg.isVisible() ){
- QApplication::processEvents();
- }
- if(dlg.result() != QDialog::Accepted){ return; } //cancelled
- QStringList sel = dlg.selectedFiles();
- if(sel.isEmpty()){ return; } //cancelled
- QString dirpath = sel.first(); //QFileDialog::getExistingDirectory(0, tr("Select a Multimedia Directory"), QDir::homePath() );
- if(dirpath.isEmpty()){ return; } //cancelled
- QDir dir(dirpath);
- QFileInfoList files = dir.entryInfoList(LXDG::findAVFileExtensions(), QDir::Files | QDir::NoDotAndDotDot, QDir::Name);
- if(files.isEmpty()){ return; } //nothing in this directory
- QList<QMediaContent> urls;
- for(int i=0; i<files.length(); i++){
- urls << QMediaContent(QUrl::fromLocalFile(files[i].absoluteFilePath()) );
- }
- PLAYLIST->addMedia(urls);
- playlistChanged();
-}
-
-void PPlayerWidget::AddURLToPlaylist(){
- QInputDialog dlg(0, Qt::Dialog | Qt::WindowStaysOnTopHint );
- dlg.setInputMode(QInputDialog::TextInput);
- dlg.setLabelText(tr("Enter a valid URL for a multimedia file or stream:"));
- dlg.setTextEchoMode(QLineEdit::Normal);
- dlg.setWindowTitle(tr("Multimedia URL"));
- dlg.setWindowIcon( LXDG::findIcon("download","") );
- //ensure it is centered on the current screen
- QPoint center = QApplication::desktop()->screenGeometry(this).center();
- dlg.move( center.x()-(dlg.width()/2), center.y()-(dlg.height()/2) );
- dlg.show();
- while( dlg.isVisible() ){
- QApplication::processEvents();
- }
- QString url = dlg.textValue();
- if(url.isEmpty() || dlg.result()!=QDialog::Accepted){ return; } //cancelled
-
- //QString url = QInputDialog::getText(0, tr("Multimedia URL"), tr("Enter a valid URL for a multimedia file or stream"), QLineEdit::Normal);
- //if(url.isEmpty()){ return; }
- QUrl newurl(url);
- if(!newurl.isValid()){ return; } //invalid URL
- PLAYLIST->addMedia(newurl);
- playlistChanged();
-}
-
-void PPlayerWidget::ClearPlaylist(){
- PLAYER->stop();
- PLAYLIST->clear();
- playlistChanged();
-}
-
-void PPlayerWidget::ShufflePlaylist(){
- PLAYLIST->shuffle();
-}
-
-
-void PPlayerWidget::userlistSelectionChanged(){ //front-end combobox was changed by the user
- if(updatinglists){ return; }
- PLAYLIST->setCurrentIndex( ui->combo_playlist->currentIndex() );
-}
-
-void PPlayerWidget::playerStateChanged(){
- switch( PLAYER->state() ){
- case QMediaPlayer::StoppedState:
- ui->tool_stop->setVisible(false);
- ui->tool_play->setVisible(true);
- ui->tool_pause->setVisible(false);
- ui->progressBar->setVisible(false);
- break;
- case QMediaPlayer::PausedState:
- ui->tool_stop->setVisible(true);
- ui->tool_play->setVisible(true);
- ui->tool_pause->setVisible(false);
- ui->progressBar->setVisible(true);
- break;
- case QMediaPlayer::PlayingState:
- ui->tool_stop->setVisible(true);
- ui->tool_play->setVisible(false);
- ui->tool_pause->setVisible(true);
- ui->progressBar->setVisible(true);
- break;
- }
-
-}
-
-void PPlayerWidget::playlistChanged(){
- updatinglists = true;
- ui->combo_playlist->clear();
- for(int i=0; i<PLAYLIST->mediaCount(); i++){
- QUrl url = PLAYLIST->media(i).canonicalUrl();
- if(url.isLocalFile()){
- ui->combo_playlist->addItem(LXDG::findMimeIcon(url.fileName().section(".",-1)), url.fileName() );
- }else{
- ui->combo_playlist->addItem(LXDG::findIcon("download",""), url.toString() );
- }
- }
- if(PLAYLIST->currentIndex()<0 && PLAYLIST->mediaCount()>0){ PLAYLIST->setCurrentIndex(0); }
- ui->combo_playlist->setCurrentIndex(PLAYLIST->currentIndex());
-
- updatinglists = false;
-}
-
-void PPlayerWidget::currentSongChanged(){
- if(PLAYLIST->currentIndex() != ui->combo_playlist->currentIndex()){
- updatinglists = true;
- ui->combo_playlist->setCurrentIndex(PLAYLIST->currentIndex());
- updatinglists = false;
- }
- ui->tool_next->setEnabled( PLAYLIST->nextIndex() >= 0 );
- ui->tool_prev->setEnabled( PLAYLIST->previousIndex() >= 0);
- ui->label_num->setText( QString::number( PLAYLIST->currentIndex()+1)+"/"+QString::number(PLAYLIST->mediaCount()) );
- ui->progressBar->setRange(0, PLAYER->duration() );
- ui->progressBar->setValue(0);
-}
-
-void PPlayerWidget::updateProgress(qint64 val){
- //qDebug() << "Update Progress Bar:" << val;
- ui->progressBar->setValue(val);
-}
-
-void PPlayerWidget::updateMaxProgress(qint64 val){
- ui->progressBar->setRange(0,val);
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/PPlayerWidget.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/PPlayerWidget.h
deleted file mode 100644
index a551d74f..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/PPlayerWidget.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This plugin is a simple audio player on the desktop
-//===========================================
-#ifndef _LUMINA_PANEL_PLUGIN_AUDIO_PLAYER_WIDGET_H
-#define _LUMINA_PANEL_PLUGIN_AUDIO_PLAYER_WIDGET_H
-
-#include <QMediaPlaylist>
-#include <QMediaPlayer>
-#include <QTimer>
-#include <QWidget>
-#include <QMenu>
-
-
-namespace Ui{
- class PPlayerWidget;
-};
-
-class PPlayerWidget : public QWidget{
- Q_OBJECT
-public:
- PPlayerWidget(QWidget *parent = 0);
- ~PPlayerWidget();
-
-public slots:
- void LoadIcons();
-
-private:
- Ui::PPlayerWidget *ui;
- QMediaPlaylist *PLAYLIST;
- QMediaPlayer *PLAYER;
- QMenu *configMenu, *addMenu;
- bool updatinglists;
-
-private slots:
- void playClicked();
- void pauseClicked();
- void stopClicked();
- void nextClicked();
- void prevClicked();
-
- void AddFilesToPlaylist();
- void AddDirToPlaylist();
- void AddURLToPlaylist();
- void ClearPlaylist();
- void ShufflePlaylist();
- void userlistSelectionChanged(); //front-end combobox was changed by the user
- void playerStateChanged();
- void playlistChanged(); //list of items changed
- void currentSongChanged();
- void updateProgress(qint64 val);
- void updateMaxProgress(qint64 val);
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/PPlayerWidget.ui b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/PPlayerWidget.ui
deleted file mode 100644
index 2d2450be..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/audioplayer/PPlayerWidget.ui
+++ /dev/null
@@ -1,182 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>PPlayerWidget</class>
- <widget class="QWidget" name="PPlayerWidget">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>346</width>
- <height>90</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Form</string>
- </property>
- <property name="styleSheet">
- <string notr="true">QToolButton::menu-indicator{ image: none; }</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="spacing">
- <number>4</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="QToolButton" name="tool_config">
- <property name="text">
- <string notr="true">Config</string>
- </property>
- <property name="popupMode">
- <enum>QToolButton::InstantPopup</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_add">
- <property name="text">
- <string notr="true">Add</string>
- </property>
- <property name="popupMode">
- <enum>QToolButton::InstantPopup</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QToolButton" name="tool_prev">
- <property name="text">
- <string notr="true">prev</string>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_num">
- <property name="text">
- <string notr="true">1/10</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_next">
- <property name="text">
- <string notr="true">next</string>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QComboBox" name="combo_playlist"/>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QToolButton" name="tool_play">
- <property name="text">
- <string notr="true">Play</string>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_pause">
- <property name="text">
- <string notr="true">Pause</string>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_stop">
- <property name="text">
- <string notr="true">Stop</string>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QProgressBar" name="progressBar">
- <property name="value">
- <number>24</number>
- </property>
- <property name="textVisible">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>0</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/battery/LBattery.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/battery/LBattery.cpp
deleted file mode 100644
index ee379613..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/battery/LBattery.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Susanne Jaeckel, 2015-2016 Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LBattery.h"
-#include "LSession.h"
-
-LBattery::LBattery(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){
- iconOld = -1;
- //Setup the widget
- label = new QLabel(this);
- label->setScaledContents(true);
- //label->setAlignment(Qt::AlignCenter);
- this->layout()->addWidget(label);
- //Setup the timer
- timer = new QTimer();
- timer->setInterval(5000); //update every 5 seconds
- connect(timer,SIGNAL(timeout()), this, SLOT(updateBattery()) );
- timer->start();
- QTimer::singleShot(0,this,SLOT(OrientationChange()) ); //update the sizing/icon
-}
-
-LBattery::~LBattery(){
- timer->stop();
- delete timer;
-}
-
-void LBattery::updateBattery(bool force){
- // Get current state of charge
- //QStringList result = LUtils::getCmdOutput("/usr/sbin/apm", QStringList() << "-al");
- int charge = LOS::batteryCharge(); //result.at(1).toInt();
-//qDebug() << "1: " << result.at(0).toInt() << " 2: " << result.at(1).toInt();
- int icon = -1;
- if (charge > 90) { icon = 4; }
- else if (charge > 70) { icon = 3; }
- else if (charge > 20) { icon = 2; }
- else if (charge > 5) { icon = 1; }
- else if (charge > 0 ) { icon = 0; }
- if(LOS::batteryIsCharging()){ icon = icon+10; }
- //icon = icon + result.at(0).toInt() * 10;
- if (icon != iconOld || force) {
- switch (icon) {
- case 0:
- label->setPixmap( LXDG::findIcon("battery-caution", "").pixmap(label->size()) );
- break;
- case 1:
- label->setPixmap( LXDG::findIcon("battery-040", "").pixmap(label->size()) );
- break;
- case 2:
- label->setPixmap( LXDG::findIcon("battery-060", "").pixmap(label->size()) );
- break;
- case 3:
- label->setPixmap( LXDG::findIcon("battery-080", "").pixmap(label->size()) );
- break;
- case 4:
- label->setPixmap( LXDG::findIcon("battery-100", "").pixmap(label->size()) );
- break;
- case 10:
- label->setPixmap( LXDG::findIcon("battery-charging-caution", "").pixmap(label->size()) );
- break;
- case 11:
- label->setPixmap( LXDG::findIcon("battery-charging-040", "").pixmap(label->size()) );
- break;
- case 12:
- label->setPixmap( LXDG::findIcon("battery-charging-060", "").pixmap(label->size()) );
- break;
- case 13:
- label->setPixmap( LXDG::findIcon("battery-charging-080", "").pixmap(label->size()) );
- break;
- case 14:
- label->setPixmap( LXDG::findIcon("battery-charging", "").pixmap(label->size()) );
- break;
- default:
- label->setPixmap( LXDG::findIcon("battery-missing", "").pixmap(label->size()) );
- break;
- }
- if(icon<iconOld && icon==0){
- //Play some audio warning chime when
- LSession::handle()->playAudioFile(LOS::LuminaShare()+"low-battery.ogg");
- }
- if(icon==0){ label->setStyleSheet("QLabel{ background: red;}"); }
- else if(icon==14 && charge>98){ label->setStyleSheet("QLabel{ background: green;}"); }
- else{ label->setStyleSheet("QLabel{ background: transparent;}"); }
- iconOld = icon;
-
- }
- //Now update the display
- QString tt;
- //Make sure the tooltip can be properly translated as necessary (Ken Moore 5/9/14)
- if(icon > 9 && icon < 15){ tt = QString(tr("%1 % (Charging)")).arg(QString::number(charge)); }
- else{ tt = QString( tr("%1 % (%2 Remaining)") ).arg(QString::number(charge), getRemainingTime() ); }
- label->setToolTip(tt);
-}
-
-QString LBattery::getRemainingTime(){
- int secs = LOS::batterySecondsLeft();
- if(secs < 0){ return "??"; }
- QString rem; //remaining
- if(secs > 3600){
- int hours = secs/3600;
- rem.append( QString::number(hours)+"h ");
- secs = secs - (hours*3600);
- }
- if(secs > 60){
- int min = secs/60;
- rem.append( QString::number(min)+"m ");
- secs = secs - (min*60);
- }
- if(secs > 0){
- rem.append(QString::number(secs)+"s");
- }
- return rem;
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/battery/LBattery.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/battery/LBattery.h
deleted file mode 100644
index 29562d5d..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/battery/LBattery.h
+++ /dev/null
@@ -1,53 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Susanne Jaeckel
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_DESKTOP_BATTERY_H
-#define _LUMINA_DESKTOP_BATTERY_H
-
-#include <QTimer>
-#include <QWidget>
-#include <QString>
-#include <QLabel>
-
-#include <LUtils.h>
-#include <LuminaXDG.h>
-#include <LuminaOS.h>
-
-#include "../../Globals.h"
-//#include "../LTBWidget.h"
-#include "../LPPlugin.h"
-
-class LBattery : public LPPlugin{
- Q_OBJECT
-public:
- LBattery(QWidget *parent = 0, QString id = "battery", bool horizontal=true);
- ~LBattery();
-
-private:
- QTimer *timer;
- QLabel *label;
- int iconOld;
-
-private slots:
- void updateBattery(bool force = false);
- QString getRemainingTime();
-
-public slots:
- void LocaleChange(){
- updateBattery(true);
- }
-
- void OrientationChange(){
- if(this->layout()->direction()==QBoxLayout::LeftToRight){
- label->setFixedSize( QSize(this->height(), this->height()) );
- }else{
- label->setFixedSize( QSize(this->width(), this->width()) );
- }
- updateBattery(true); //force icon refresh
- }
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/battery/NOTES b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/battery/NOTES
deleted file mode 100644
index 3d93267e..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/battery/NOTES
+++ /dev/null
@@ -1,49 +0,0 @@
-Eventuell mit einem Menü implementieren, mit Einträgen für:
-Anzeige des kompletten Status und Infos
-Herunterfahren des Systems etc.
-
-apm -a
- Zeigt den AC line status an
- 0 = off-line
- 1 = on-line
- 2 = backup-power
-
-apm -b
- Zeigt
- 0 = high
- 1 = low
- 2 = critical
- 3 = charging
-
-apm -l
- Zeit die prozentuale Kapazitaet
- 255 = nicht unterstuetzt
-
-apm -t
- Zeigt die verbleibende Zeit in Sekunden
-
-Aufruf Systemfunktionen: LUtils.h
-
-mit der Methode:
-QStringList LUtils::getCmdOutput(QString cmd, QStringList args)
-
-Icons:
-/usr/local/share/icons/oxygen/22x22/status
-oder unter:
-/usr/local/share/icons/oxygen/16x16/status
-
-battery-040.png // 40 %
-battery-060.png
-battery-080.png
-battery-100.png
-
-battery-caution.png
-battery-charging.png
-battery-charging-040.png
-battery-charging-060.png
-battery-charging-080.png
-battery-charging-caution.png
-
-battery-charging-log.png
-battery-log.png
-battery-missing.png
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/clock/LClock.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/clock/LClock.cpp
deleted file mode 100644
index b370c536..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/clock/LClock.cpp
+++ /dev/null
@@ -1,230 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2012-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LClock.h"
-#include "LSession.h"
-#include <LuminaThemes.h>
-#include <LuminaXDG.h>
-
-LClock::LClock(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){
- button = new QToolButton(this); //RotateToolButton(this);
- button->setAutoRaise(true);
- button->setToolButtonStyle(Qt::ToolButtonTextOnly);
- button->setStyleSheet("font-weight: bold;");
- button->setPopupMode(QToolButton::DelayedPopup); //make sure it runs the update routine first
- button->setMenu(new QMenu());
- //button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
- //this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
- connect(button, SIGNAL(clicked()), this, SLOT(openMenu()));
- connect(button->menu(), SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed()));
- calendar = new QCalendarWidget(this);
- calAct = new QWidgetAction(this);
- calAct->setDefaultWidget(calendar);
- TZMenu = new QMenu(this);
- connect(TZMenu, SIGNAL(triggered(QAction*)), this, SLOT(ChangeTZ(QAction*)) );
-
- //Now assemble the menu
- button->menu()->addAction(calAct);
- button->menu()->addMenu(TZMenu);
-
- this->layout()->setContentsMargins(0,0,0,0); //reserve some space on left/right
- this->layout()->addWidget(button);
-
- //Setup the timer
- timer = new QTimer();
- //Load all the initial settings
- updateFormats();
- LocaleChange();
- ThemeChange();
- OrientationChange();
- //Now connect/start the timer
- connect(timer,SIGNAL(timeout()), this, SLOT(updateTime()) );
- connect(QApplication::instance(), SIGNAL(SessionConfigChanged()), this, SLOT(updateFormats()) );
- timer->start();
-}
-
-LClock::~LClock(){
- timer->stop();
- delete timer;
-}
-
-
-void LClock::updateTime(bool adjustformat){
- QDateTime CT = QDateTime::currentDateTime();
- //Now update the display
- QString label;
- QString timelabel;
- QString datelabel;
- if(deftime){ timelabel = CT.time().toString(Qt::DefaultLocaleShortDate) ; }
- else{ timelabel=CT.toString(timefmt); }
- if(defdate){ datelabel = CT.date().toString(Qt::DefaultLocaleShortDate); }
- else{ datelabel = CT.toString(datefmt); }
- if(datetimeorder == "dateonly"){
- label = datelabel;
- button->setToolTip(timelabel);
- }else if(datetimeorder == "timedate"){
- label = timelabel + "\n" + datelabel;
- button->setToolTip("");
- }else if(datetimeorder == "datetime"){
- label = datelabel + "\n" + timelabel;
- button->setToolTip("");
- }else{
- label = timelabel;
- button->setToolTip(datelabel);
- }
- if( this->layout()->direction() == QBoxLayout::TopToBottom ){
- //different routine for vertical text (need newlines instead of spaces)
- for(int i=0; i<label.count("\n")+1; i++){
- if(this->size().width() < (this->fontMetrics().width(label.section("\n",i,i))+10 )&& label.section("\n",i,i).contains(" ")){
- label.replace(label.section("\n",i,i), label.section("\n",i,i).replace(" ", "\n"));
- i--;
- }
- }
- //label.replace(" ","\n");
- }else if( this->size().height() < 2*this->fontMetrics().height() ){
- label.replace("\n",", ");
- }
- if(adjustformat){
- //Check the font/spacing for the display and adjust as necessary
- /*double efflines = label.count("\n")+1; //effective lines (with wordwrap)
- if( (button->fontMetrics().height()*efflines) > button->height() ){
- //Force a pixel metric font size to fit everything
- int szH = qRound( (button->height() - button->fontMetrics().lineSpacing() )/efflines );
- //Need to supply a *width* pixel, not a height metric
- int szW = qRound( (szH*button->fontMetrics().maxWidth())/( (double) button->fontMetrics().height()) );
- qDebug() << "Change Clock font:" << button->height() << szH << szW << efflines << button->fontMetrics().height() << button->fontMetrics().lineSpacing();
- button->setStyleSheet("font-weight: bold; font-size: "+QString::number(szW)+"px;");
- }else{
- button->setStyleSheet("font-weight: bold;");
- }*/
- if(this->layout()->direction()==QBoxLayout::LeftToRight){
- //horizontal layout
- this->setFixedWidth( this->sizeHint().width() +6);
- }else{
- //vertical layout
- this->setMaximumWidth(100000);
- }
- }
- button->setText(label);
-}
-
-void LClock::updateFormats(){
- qDebug() << "Updating clock format";
- timefmt = LSession::handle()->sessionSettings()->value("TimeFormat","").toString();
- datefmt = LSession::handle()->sessionSettings()->value("DateFormat","").toString();
- deftime = timefmt.simplified().isEmpty();
- defdate = datefmt.simplified().isEmpty();
- //Adjust the timer interval based on the smallest unit displayed
- if(deftime){ timer->setInterval(500); } //1/2 second
- else if(timefmt.contains("z")){ timer->setInterval(1); } //every millisecond (smallest unit)
- else if(timefmt.contains("s")){ timer->setInterval(500); } //1/2 second
- else if(timefmt.contains("m")){ timer->setInterval(2000); } //2 seconds
- else{ timer->setInterval(1000); } //unknown format - use 1 second interval
- datetimeorder = LSession::handle()->sessionSettings()->value("DateTimeOrder", "timeonly").toString().toLower();
- //this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
- updateTime(true);
- //Now fix the size of the widget with the new size hint
- //this->setFixedWidth( this->sizeHint().width() +6);
-}
-
-void LClock::updateMenu(){
- QDateTime cdt = QDateTime::currentDateTime();
- TZMenu->setTitle(QString(tr("Time Zone (%1)")).arg(cdt.timeZoneAbbreviation()) );
- calendar->showToday(); //make sure the current month is visible
- calendar->setSelectedDate(QDate::currentDate()); //select the actual date for today
-}
-
-void LClock::openMenu(){
- updateMenu();
- button->showMenu();
-}
-
-void LClock::closeMenu(){
- button->menu()->hide();
-}
-
-void LClock::ChangeTZ(QAction *act){
- LTHEME::setCustomEnvSetting("TZ",act->whatsThis());
- QTimer::singleShot(500, this, SLOT(updateTime()) );
-}
-
-void LClock::LocaleChange(){
- //Refresh all the time zone information
- TZMenu->clear();
- TZMenu->addAction(tr("Use System Time"));
- TZMenu->addSeparator();
- QList<QByteArray> TZList = QTimeZone::availableTimeZoneIds();
- //Orgnize time zones for smaller menus (Continent/Country/City)
- // Note: id = Continent/City
- QStringList info;
- for(int i=0; i<TZList.length(); i++){
- QTimeZone tz(TZList[i]);
- if(!QString(tz.id()).contains("/")){ continue; }
- info << "::::"+QString(tz.id()).section("/",0,0)+"::::"+QLocale::countryToString(tz.country())+"::::"+QString(tz.id()).section("/",1,100).replace("_"," ")+"::::"+QString(tz.id());
- }
- //Now sort alphabetically
- info.sort();
- //Now create the menu tree
- QString continent, country; //current continent/country
- QMenu *tmpC=0; //continent menu
- QMenu *tmpCM=0; //country menu
- for(int i=0; i<info.length(); i++){
- //Check if different continent
- if(info[i].section("::::",1,1)!=continent){
- if(tmpC!=0){
- if(tmpCM!=0 && !tmpCM->isEmpty()){
- tmpC->addMenu(tmpCM);
- }
- if(!tmpC->isEmpty()){ TZMenu->addMenu(tmpC); }
- }
- tmpC = new QMenu(this);
- tmpC->setTitle(info[i].section("::::",1,1));
- tmpCM = new QMenu(this);
- tmpCM->setTitle(info[i].section("::::",2,2));
- //Check if different country
- }else if(info[i].section("::::",2,2)!=country){
- if(tmpC!=0 && tmpCM!=0 && !tmpCM->isEmpty()){
- tmpC->addMenu(tmpCM);
- }
- tmpCM = new QMenu(this);
- tmpCM->setTitle(info[i].section("::::",2,2));
- }
- //Now create the entry within the country menu
- if(tmpCM!=0){
- QAction *act = new QAction(info[i].section("::::",3,3), this);
- act->setWhatsThis(info[i].section("::::",4,4) );
- tmpCM->addAction(act);
- }
- //Save the values for the next run
- continent = info[i].section("::::",1,1);
- country = info[i].section("::::",2,2);
-
- if(i== info.length()-1){
- //last go through - save all menus
- if(tmpCM!=0 && tmpC!=0 && !tmpCM->isEmpty()){ tmpC->addMenu(tmpCM); }
- if(tmpC!=0 && !tmpC->isEmpty()){ TZMenu->addMenu(tmpC); }
- }
- }
-
-}
-
-void LClock::ThemeChange(){
- TZMenu->setIcon(LXDG::findIcon("clock",""));
-}
-
-void LClock::OrientationChange(){
- if(this->layout()->direction()==QBoxLayout::LeftToRight){ //horizontal panel
- //button->setRotation(0); //no rotation of text
- this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
- button->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
- }else{ //vertical panel
- //button->setRotation(90); //90 degree rotation
- this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
- button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
- }
- updateTime(true); //re-adjust the font/spacings
- this->layout()->update();
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/clock/LClock.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/clock/LClock.h
deleted file mode 100644
index eddf782c..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/clock/LClock.h
+++ /dev/null
@@ -1,58 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2012-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_DESKTOP_CLOCK_H
-#define _LUMINA_DESKTOP_CLOCK_H
-
-#include <QTimer>
-#include <QDateTime>
-#include <QLabel>
-#include <QWidget>
-#include <QString>
-#include <QLocale>
-#include <QTimeZone>
-#include <QCalendarWidget>
-#include <QWidgetAction>
-#include <QAction>
-#include <QToolButton>
-#include <QMenu>
-
-#include "../LPPlugin.h"
-
-//#include "../RotateToolButton.h"
-
-class LClock : public LPPlugin{
- Q_OBJECT
-public:
- LClock(QWidget *parent = 0, QString id = "clock", bool horizontal=true);
- ~LClock();
-
-private:
- QTimer *timer;
- QToolButton *button; //RotateToolButton
- QString timefmt, datefmt, datetimeorder;
- bool deftime, defdate;
- QMenu *TZMenu;
- QCalendarWidget *calendar;
- QWidgetAction *calAct;
-
-private slots:
- void updateTime(bool adjustformat = false);
- void updateFormats();
-
- void updateMenu();
- void openMenu();
- void closeMenu();
-
- void ChangeTZ(QAction*);
-
-public slots:
- void LocaleChange();
- void ThemeChange();
- void OrientationChange();
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/desktopbar/LDeskBar.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/desktopbar/LDeskBar.cpp
deleted file mode 100644
index 90d942de..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/desktopbar/LDeskBar.cpp
+++ /dev/null
@@ -1,207 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2012-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LDeskBar.h"
-#include "../../LSession.h"
-
-LDeskBarPlugin::LDeskBarPlugin(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){
- this->layout()->setContentsMargins(0,0,0,0);
- this->setStyleSheet( "QToolButton::menu-indicator{ image: none; } QToolButton{ padding: 0px; }");
-
- //initialize the desktop bar items
- initializeDesktop();
- //setup the directory watcher
- QString fav = QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/favorites.list";
- if(!QFile::exists(fav)){ QProcess::execute("touch \""+fav+"\""); }
- watcher = new QFileSystemWatcher(this);
- watcher->addPath( fav );
- connect(watcher, SIGNAL(fileChanged(QString)), this, SLOT(filechanged(QString)) );
- QTimer::singleShot(1,this, SLOT(updateFiles()) ); //make sure to load it the first time
- QTimer::singleShot(0,this, SLOT(OrientationChange()) ); //adjust sizes/layout
- connect(QApplication::instance(), SIGNAL(DesktopFilesChanged()), this, SLOT(updateFiles()) );
-}
-
-LDeskBarPlugin::~LDeskBarPlugin(){
-}
-
-// =======================
-// PRIVATE FUNCTIONS
-// =======================
-void LDeskBarPlugin::initializeDesktop(){
- //Applications on the desktop
- appB = new QToolButton(this);
- appB->setToolButtonStyle(Qt::ToolButtonIconOnly);
- appB->setAutoRaise(true);
- appB->setPopupMode(QToolButton::InstantPopup);
- appM = new QMenu(this);
- appB->setMenu(appM);
- this->layout()->addWidget(appB);
- connect(appM,SIGNAL(triggered(QAction*)),this,SLOT(ActionTriggered(QAction*)) );
- connect(appM, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed()));
- //Directories on the desktop
- dirB = new QToolButton(this);
- dirB->setToolButtonStyle(Qt::ToolButtonIconOnly);
- dirB->setAutoRaise(true);
- dirB->setPopupMode(QToolButton::InstantPopup);
- dirM = new QMenu(this);
- dirB->setMenu(dirM);
- this->layout()->addWidget(dirB);
- connect(dirM,SIGNAL(triggered(QAction*)),this,SLOT(ActionTriggered(QAction*)) );
- connect(dirM, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed()));
- //Audio Files on the desktop
- audioM = new QMenu(this);
- connect(audioM,SIGNAL(triggered(QAction*)),this,SLOT(ActionTriggered(QAction*)) );
- //Video Files on the desktop
- videoM = new QMenu(this);
- connect(videoM,SIGNAL(triggered(QAction*)),this,SLOT(ActionTriggered(QAction*)) );
- //Picture Files on the desktop
- pictureM = new QMenu(this);
- connect(pictureM,SIGNAL(triggered(QAction*)),this,SLOT(ActionTriggered(QAction*)) );
- //Other Files on the desktop
- otherM = new QMenu(this);
- connect(otherM,SIGNAL(triggered(QAction*)),this,SLOT(ActionTriggered(QAction*)) );
- docM = new QMenu(this);
- connect(docM,SIGNAL(triggered(QAction*)), this,SLOT(ActionTriggered(QAction*)) );
- //All Files Button
- fileB = new QToolButton(this);
- fileB->setToolButtonStyle(Qt::ToolButtonIconOnly);
- fileB->setAutoRaise(true);
- fileB->setPopupMode(QToolButton::InstantPopup);
- fileM = new QMenu(this);
- fileB->setMenu(fileM);
- this->layout()->addWidget(fileB);
-
- updateIcons(); //set all the text/icons
-}
-
-QAction* LDeskBarPlugin::newAction(QString filepath, QString name, QString iconpath){
- return newAction(filepath, name, QIcon(iconpath));
-}
-
-QAction* LDeskBarPlugin::newAction(QString filepath, QString name, QIcon icon){
- QAction *act = new QAction(icon, name, this);
- act->setWhatsThis(filepath);
- return act;
-}
-
-// =======================
-// PRIVATE SLOTS
-// =======================
-void LDeskBarPlugin::ActionTriggered(QAction* act){
- //Open up the file with the appropriate application
- QString cmd = "lumina-open \""+act->whatsThis()+"\"";
- qDebug() << "Open File:" << cmd;
- LSession::LaunchApplication(cmd);
-}
-void LDeskBarPlugin::filechanged(QString file){
- updateFiles();
- if(!watcher->files().contains(file)){ watcher->addPath(file); } //make sure the file does not get removed from the watcher
-}
-void LDeskBarPlugin::updateFiles(){
- QFileInfoList homefiles = LSession::handle()->DesktopFiles();
- QStringList favitems = LDesktopUtils::listFavorites();
- //Remember for format for favorites: <name>::::[app/dir/<mimetype>]::::<full path>
- for(int i=0; i<homefiles.length(); i++){
- if( !favitems.filter(homefiles[i].canonicalFilePath()).isEmpty() ){ continue; } //duplicate entry
- QString type;
- if(homefiles[i].isDir()){ type="dir"; }
- else if(homefiles[i].fileName().endsWith(".desktop")){ type="app"; }
- else{ type=LXDG::findAppMimeForFile(homefiles[i].fileName()); }
- favitems << homefiles[i].fileName()+"::::"+type+"::::"+homefiles[i].absoluteFilePath();
- //qDebug() << "Desktop Item:" << favitems.last();
- }
-
- favitems.sort(); //sort them alphabetically
- //Now add the items to the lists
- appM->clear();
- dirM->clear();
- audioM->clear();
- videoM->clear();
- pictureM->clear();
- docM->clear();
- otherM->clear();
- for(int i=0; i<favitems.length(); i++){
- QString type = favitems[i].section("::::",1,1);
- QString name = favitems[i].section("::::",0,0);
- QString path = favitems[i].section("::::",2,50);
- if(type=="app"){
- //Add it to appM
- bool ok = false;
- XDGDesktop df(path);
- if(df.isValid() && !df.isHidden){
- appM->addAction( newAction(df.filePath, df.name, LXDG::findIcon(df.icon, ":/images/default-application.png")) );
- }
- }else if(type=="dir"){
- //Add it to dirM
- dirM->addAction( newAction(path, name, LXDG::findIcon("folder","")) );
- }else if(type.startsWith("audio/")){
- //Add it to audioM
- audioM->addAction( newAction(path, name, LXDG::findMimeIcon(type)) );
- }else if(type.startsWith("video/")){
- //Add it to videoM
- videoM->addAction( newAction(path, name, LXDG::findMimeIcon(type)) );
- }else if(type.startsWith("image/")){
- //Add it to pictureM
- if(LUtils::imageExtensions().contains(path.section("/",-1).section(".",-1).toLower()) ){
- pictureM->addAction( newAction(path, name, QIcon(path)) );
- }else{
- pictureM->addAction( newAction(path, name, LXDG::findMimeIcon(type)) );
- }
- }else if(type.startsWith("text/")){
- //Add it to docM
- docM->addAction( newAction(path, name, LXDG::findMimeIcon(type)) );
- }else{
- //Add it to otherM
- otherM->addAction( newAction(path, name, LXDG::findMimeIcon(type)) );
- }
-
- }
-
- //Now update the file menu as appropriate
- fileM->clear();
- if(!audioM->isEmpty()){ fileM->addMenu(audioM); }
- if(!docM->isEmpty()){ fileM->addMenu(docM); }
- if(!pictureM->isEmpty()){ fileM->addMenu(pictureM); }
- if(!videoM->isEmpty()){ fileM->addMenu(videoM); }
- if(!otherM->isEmpty()){ fileM->addMenu(otherM); }
- //Check for a single submenu, and skip the main if need be
- disconnect(fileB->menu(), SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed()) );
- if(fileM->actions().length()==1){
- if(!audioM->isEmpty()){ fileB->setMenu(audioM); }
- else if(!pictureM->isEmpty()){ fileB->setMenu(pictureM); }
- else if(!videoM->isEmpty()){ fileB->setMenu(videoM); }
- else if(!docM->isEmpty()){ fileB->setMenu(docM); }
- else if(!otherM->isEmpty()){ fileB->setMenu(otherM); }
- }else{
- fileB->setMenu(fileM);
- }
- connect(fileB->menu(), SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed()));
-
- //Setup the visibility of the buttons
- appB->setVisible( !appM->isEmpty() );
- dirB->setVisible( !dirM->isEmpty() );
- fileB->setVisible( !fileM->isEmpty() );
-}
-
-void LDeskBarPlugin::updateIcons(){
- //Set all the text/icons
- appB->setIcon( LXDG::findIcon("favorites", "") );
- appB->setToolTip(tr("Favorite Applications"));
- dirB->setIcon( LXDG::findIcon("folder", "") );
- dirB->setToolTip(tr("Favorite Folders"));
- audioM->setTitle( tr("Audio") );
- audioM->setIcon( LXDG::findIcon("audio-x-generic","") );
- videoM->setTitle( tr("Video") );
- videoM->setIcon( LXDG::findIcon("video-x-generic","") );
- pictureM->setTitle( tr("Pictures") );
- pictureM->setIcon( LXDG::findIcon("image-x-generic","") );
- otherM->setTitle( tr("Other Files") );
- otherM->setIcon( LXDG::findIcon("unknown","") );
- docM->setTitle( tr("Documents") );
- docM->setIcon( LXDG::findIcon("x-office-document","") );
- fileB->setIcon( LXDG::findIcon("document-multiple", "") );
- fileB->setToolTip(tr("Favorite Files") );
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/desktopbar/LDeskBar.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/desktopbar/LDeskBar.h
deleted file mode 100644
index 74f41230..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/desktopbar/LDeskBar.h
+++ /dev/null
@@ -1,88 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2012, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This plugin displays the contents of the user's home directory
-// as organized within a couple buttons on the panel (apps, dirs, files)
-//===========================================
-#ifndef _LUMINA_DESKTOP_DESKBAR_H
-#define _LUMINA_DESKTOP_DESKBAR_H
-
-// Qt includes
-#include <QWidget>
-#include <QString>
-#include <QAction>
-#include <QMenu>
-#include <QProcess>
-#include <QTimer>
-#include <QFileSystemWatcher>
-#include <QHBoxLayout>
-#include <QIcon>
-#include <QToolButton>
-#include <QDebug>
-
-// libLumina includes
-#include <LuminaXDG.h>
-
-// local includes
-//#include "../LTBWidget.h"
-#include "../LPPlugin.h"
-
-class LDeskBarPlugin : public LPPlugin{
- Q_OBJECT
-public:
- LDeskBarPlugin(QWidget* parent=0, QString id = "desktopbar", bool horizontal=true);
- ~LDeskBarPlugin();
-
-private:
- QFileSystemWatcher *watcher;
- //Special toolbuttons and menus
- QToolButton *appB, *fileB, *dirB;
- QMenu *appM, *dirM, *audioM, *videoM, *pictureM, *fileM, *otherM, *docM;
- QList<QToolButton*> APPLIST;
- QDateTime lastHomeUpdate;
-
- void initializeDesktop();
- //bool readDesktopFile(QString path, QString &name, QString &iconpath);
-
- QAction* newAction(QString filepath, QString name, QString iconpath);
- QAction* newAction(QString filepath, QString name, QIcon icon);
-
- //void updateMenu(QMenu* menu, QFileInfoList files, bool trim = true);
-
-
-private slots:
- void ActionTriggered(QAction* act);
- void filechanged(QString);
- void updateFiles();
- void updateIcons();
-
-public slots:
- void LocaleChange(){
- updateIcons();
- updateFiles();
- }
-
- void OrientationChange(){
- QSize sz;
- if(this->layout()->direction()==QBoxLayout::LeftToRight){
- this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
- sz = QSize(this->height(), this->height());
- }else{
- this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
- sz = QSize(this->width(), this->width());
- }
- appB->setIconSize(sz);
- fileB->setIconSize(sz);
- dirB->setIconSize(sz);
- for(int i=0; i<APPLIST.length(); i++){
- APPLIST[i]->setIconSize(sz);
- }
- this->layout()->update();
- }
-};
-
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/desktopswitcher/LDesktopSwitcher.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/desktopswitcher/LDesktopSwitcher.cpp
deleted file mode 100644
index 8e0a9d28..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/desktopswitcher/LDesktopSwitcher.cpp
+++ /dev/null
@@ -1,148 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Susanne Jaeckel
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LDesktopSwitcher.h"
-#include <LSession.h>
-
-LDesktopSwitcher::LDesktopSwitcher(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal) {
- iconOld = -1;
- this->setStyleSheet( "QToolButton::menu-indicator{ image: none; } QToolButton{padding: 0px;}");
- //Setup the widget
- label = new QToolButton(this);
- label->setPopupMode(QToolButton::DelayedPopup);
- label->setAutoRaise(true);
- label->setToolButtonStyle(Qt::ToolButtonIconOnly);
- label->setIcon( LXDG::findIcon("format-view-carousel", "preferences-desktop-display") );
- label->setToolTip(QString("Workspace 1"));
- connect(label, SIGNAL(clicked()), this, SLOT(openMenu()));
- menu = new QMenu(this);
- connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(menuActionTriggered(QAction*)));
- connect(menu, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed()));
- label->setMenu(menu);
- this->layout()->addWidget(label);
-
- // Maybe a timer should be set to set the toolTip of the button,
- // becasue the workspace could be switched via Keyboard-shortcuts ...
-
- QTimer::singleShot(500, this, SLOT(createMenu()) ); //needs a delay to make sure it works right the first time
- QTimer::singleShot(0,this, SLOT(OrientationChange()) ); //adjust icon size
-
- //Process the signal which is sent when the workspace is changed via keyboard-shortcuts
- connect(QApplication::instance(), SIGNAL(WorkspaceChanged()), this, SLOT(updateWorkspaceMenu()));
-}
-
-LDesktopSwitcher::~LDesktopSwitcher(){
-}
-/* MOVED THESE FUNCTIONS TO LIBLUMINA (LuminaX11.h) -- Ken Moore 5/9/14
-void LDesktopSwitcher::setNumberOfDesktops(int number) {
- Display *display = QX11Info::display();
- Window rootWindow = QX11Info::appRootWindow();
-
- Atom atom = XInternAtom(display, "_NET_NUMBER_OF_DESKTOPS", False);
- XEvent xevent;
- xevent.type = ClientMessage;
- xevent.xclient.type = ClientMessage;
- xevent.xclient.display = display;
- xevent.xclient.window = rootWindow;
- xevent.xclient.message_type = atom;
- xevent.xclient.format = 32;
- xevent.xclient.data.l[0] = number;
- xevent.xclient.data.l[1] = CurrentTime;
- xevent.xclient.data.l[2] = 0;
- xevent.xclient.data.l[3] = 0;
- xevent.xclient.data.l[4] = 0;
- XSendEvent(display, rootWindow, False, SubstructureNotifyMask | SubstructureRedirectMask, &xevent);
-
- XFlush(display);
-}
-
-void LDesktopSwitcher::setCurrentDesktop(int number) {
- Display *display = QX11Info::display();
- Window rootWindow = QX11Info::appRootWindow();
-
- Atom atom = XInternAtom(display, "_NET_CURRENT_DESKTOP", False);
- XEvent xevent;
- xevent.type = ClientMessage;
- xevent.xclient.type = ClientMessage;
- xevent.xclient.display = display;
- xevent.xclient.window = rootWindow;
- xevent.xclient.message_type = atom;
- xevent.xclient.format = 32;
- xevent.xclient.data.l[0] = number;
- xevent.xclient.data.l[1] = CurrentTime;
- xevent.xclient.data.l[2] = 0;
- xevent.xclient.data.l[3] = 0;
- xevent.xclient.data.l[4] = 0;
- XSendEvent(display, rootWindow, False, SubstructureNotifyMask | SubstructureRedirectMask, &xevent);
-
- XFlush(display);
-}
-
-int LDesktopSwitcher::getNumberOfDesktops() {
- int number = -1;
- Atom a = XInternAtom(QX11Info::display(), "_NET_NUMBER_OF_DESKTOPS", true);
- Atom realType;
- int format;
- unsigned long num, bytes;
- unsigned char *data = 0;
- int status = XGetWindowProperty(QX11Info::display(), QX11Info::appRootWindow(), a, 0L, (~0L),
- false, AnyPropertyType, &realType, &format, &num, &bytes, &data);
- if( (status >= Success) && (num > 0) ){
- number = *data;
- XFree(data);
- }
- return number;
-}
-
-int LDesktopSwitcher::getCurrentDesktop() {
- int number = -1;
- Atom a = XInternAtom(QX11Info::display(), "_NET_CURRENT_DESKTOP", true);
- Atom realType;
- int format;
- unsigned long num, bytes;
- unsigned char *data = 0;
- int status = XGetWindowProperty(QX11Info::display(), QX11Info::appRootWindow(), a, 0L, (~0L),
- false, AnyPropertyType, &realType, &format, &num, &bytes, &data);
- if( (status >= Success) && (num > 0) ){
- number = *data;
- XFree(data);
- }
- return number;
-} */
-
-void LDesktopSwitcher::openMenu(){
- //Make sure the menu is refreshed right before it opens
- createMenu();
- label->showMenu();
-}
-
-QAction* LDesktopSwitcher::newAction(int what, QString name) {
- QAction *act = new QAction(LXDG::findIcon("preferences-desktop-display", ""), name, this);
- act->setWhatsThis(QString::number(what));
- return act;
-}
-
-void LDesktopSwitcher::createMenu() {
- int cur = LSession::handle()->XCB->CurrentWorkspace(); //current desktop number
- int tot = LSession::handle()->XCB->NumberOfWorkspaces(); //total number of desktops
- //qDebug() << "-- vor getCurrentDesktop SWITCH";
- qDebug() << "Virtual Desktops:" << tot << cur;
- menu->clear();
- for (int i = 0; i < tot; i++) {
- QString name = QString(tr("Workspace %1")).arg( QString::number(i+1) );
- if(i == cur){ name.prepend("*"); name.append("*");} //identify which desktop this is currently
- menu->addAction(newAction(i, name));
- }
- label->setToolTip(QString(tr("Workspace %1")).arg(QString::number(cur + 1)));
-}
-
-void LDesktopSwitcher::menuActionTriggered(QAction* act) {
- LSession::handle()->XCB->SetCurrentWorkspace(act->whatsThis().toInt());
-}
-
-void LDesktopSwitcher::updateWorkspaceMenu() {
- createMenu();
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/desktopswitcher/LDesktopSwitcher.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/desktopswitcher/LDesktopSwitcher.h
deleted file mode 100644
index 69fe46da..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/desktopswitcher/LDesktopSwitcher.h
+++ /dev/null
@@ -1,73 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Susanne Jaeckel
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_DESKTOP_SWITCHER_H
-#define _LUMINA_DESKTOP_SWITCHER_H
-
-#include <QTimer>
-#include <QWidget>
-#include <QString>
-//#include <QX11Info>
-#include <QMenu>
-#include <QToolButton>
-
-#include <LUtils.h>
-#include <LuminaXDG.h>
-#include <LuminaX11.h>
-
-//#include "../LTBWidget.h"
-#include "../LPPlugin.h"
-
-//#include <X11/Xlib.h>
-//#include <X11/Xutil.h>
-//#include <X11/Xatom.h>
-
-class LDesktopSwitcher : public LPPlugin{
- Q_OBJECT
-public:
- LDesktopSwitcher(QWidget *parent = 0, QString id = "desktopswitcher", bool horizontal=true);
- ~LDesktopSwitcher();
-
-private:
- QTimer *timer;
- QToolButton *label;
- QMenu *menu;
- int iconOld;
-
- //void setNumberOfDesktops(int);
- //void setCurrentDesktop(int);
- //int getNumberOfDesktops();
- //int getCurrentDesktop();
-
-
- QAction* newAction(int, QString);
-
-private slots:
- void openMenu();
- void createMenu();
- void menuActionTriggered(QAction*);
- void updateWorkspaceMenu();
-
-public slots:
- void LocaleChange(){
- createMenu();
- }
-
- void OrientationChange(){
- QSize sz;
- if(this->layout()->direction()==QBoxLayout::LeftToRight){
- this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
- sz = QSize(this->height(), this->height());
- }else{
- this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
- sz = QSize(this->width(), this->width());
- }
- label->setIconSize(sz);
- this->layout()->update();
- }
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/jsonmenu/PPJsonMenu.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/jsonmenu/PPJsonMenu.cpp
deleted file mode 100644
index 14880f9b..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/jsonmenu/PPJsonMenu.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-//===========================================
-// Lumina Desktop source code
-// Copyright (c) 2016, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "PPJsonMenu.h"
-#include "../../JsonMenu.h"
-
-LPJsonMenu::LPJsonMenu(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){
- //Setup the button
- button = new QToolButton(this);
- button->setAutoRaise(true);
- button->setToolButtonStyle(Qt::ToolButtonIconOnly);
- button->setPopupMode(QToolButton::InstantPopup); //make sure it runs the update routine first
- //connect(button, SIGNAL(clicked()), this, SLOT(openMenu()));
- this->layout()->setContentsMargins(0,0,0,0);
- this->layout()->addWidget(button);
- //Parse the id and get the extra information needed for the plugin
- QStringList info = id.section("---",0,0).split("::::"); //FORMAT:[ "jsonmenu---<number>",exec,name, icon(optional)]
- if(info.length()>=3){
- qDebug() << "Custom JSON Menu Loaded:" << info;
- JsonMenu *menu = new JsonMenu(info[1], button);
- button->setText(info[2]);
- //connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(SystemApplication(QAction*)) );
- if(info.length()>=4){ button->setIcon( LXDG::findIcon(info[3],"run-build") ); }
- else{ button->setIcon( LXDG::findIcon("run-build","") ); }
- button->setMenu(menu);
- }
- //Now start up the widgets
- QTimer::singleShot(0,this,SLOT(OrientationChange()) ); //update the sizing/icon
-}
-
-LPJsonMenu::~LPJsonMenu(){
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/jsonmenu/PPJsonMenu.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/jsonmenu/PPJsonMenu.h
deleted file mode 100644
index d0827fd2..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/jsonmenu/PPJsonMenu.h
+++ /dev/null
@@ -1,42 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2016, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_PANEL_JSON_PLUGIN_H
-#define _LUMINA_PANEL_JSON_PLUGIN_H
-
-#include "../../Globals.h"
-#include "../LPPlugin.h"
-
-
-class LPJsonMenu : public LPPlugin{
- Q_OBJECT
-public:
- LPJsonMenu(QWidget *parent = 0, QString id = "jsonmenu", bool horizontal=true);
- ~LPJsonMenu();
-
-private:
- QToolButton *button;
-
-private slots:
- //void SystemApplication(QAction*);
-
-public slots:
- void LocaleChange(){
- }
-
- void OrientationChange(){
- if(this->layout()->direction()==QBoxLayout::LeftToRight){
- this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
- button->setIconSize( QSize(this->height(), this->height()) );
- }else{
- this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
- button->setIconSize( QSize(this->width(), this->width()) );
- }
- this->layout()->update();
- }
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/line/LLine.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/line/LLine.h
deleted file mode 100644
index 94de486e..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/line/LLine.h
+++ /dev/null
@@ -1,40 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This class is a generic line separator for the panel
-//===========================================
-#ifndef _LUMINA_DESKTOP_PANEL_PLUGIN_LINE_H
-#define _LUMINA_DESKTOP_PANEL_PLUGIN_LINE_H
-
-#include "../LPPlugin.h"
-#include <QFrame>
-
-class LLinePlugin : public LPPlugin{
- Q_OBJECT
-private:
- QFrame *line;
-
-public:
- LLinePlugin(QWidget *parent=0, QString id="spacer", bool horizontal=true) : LPPlugin(parent, id, horizontal){
- line = new QFrame(this);
- line->setObjectName("LuminaPanelLine");
- this->layout()->addWidget(line);
- OrientationChange();
- }
- ~LLinePlugin(){}
-
-public slots:
- void OrientationChange(){
- if(this->layout()->direction()==QBoxLayout::LeftToRight){ //horizontal
- line->setFrameShape(QFrame::VLine);
- }else{ //vertical
- line->setFrameShape(QFrame::HLine);
- }
- }
-};
-
-
-#endif \ No newline at end of file
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/panel-plugins.pri b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/panel-plugins.pri
deleted file mode 100644
index c40c4725..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/panel-plugins.pri
+++ /dev/null
@@ -1,57 +0,0 @@
-#Lumina Desktop Panel Plugin files
-
-SOURCES += $$PWD/userbutton/LUserButton.cpp \
- $$PWD/userbutton/UserWidget.cpp \
- $$PWD/userbutton/UserItemWidget.cpp \
- $$PWD/desktopbar/LDeskBar.cpp \
- $$PWD/taskmanager/LTaskManagerPlugin.cpp \
- $$PWD/taskmanager/LTaskButton.cpp \
- $$PWD/systemtray/LSysTray.cpp \
- $$PWD/systemtray/TrayIcon.cpp \
- $$PWD/clock/LClock.cpp \
- $$PWD/battery/LBattery.cpp \
- $$PWD/desktopswitcher/LDesktopSwitcher.cpp \
- $$PWD/systemdashboard/LSysDashboard.cpp \
- $$PWD/systemdashboard/SysMenuQuick.cpp \
- $$PWD/showdesktop/LHomeButton.cpp \
- $$PWD/appmenu/LAppMenuPlugin.cpp \
- $$PWD/applauncher/AppLaunchButton.cpp \
- $$PWD/systemstart/LStartButton.cpp \
- $$PWD/systemstart/StartMenu.cpp \
- $$PWD/systemstart/ItemWidget.cpp \
- $$PWD/audioplayer/LPAudioPlayer.cpp \
- $$PWD/audioplayer/PPlayerWidget.cpp \
- $$PWD/jsonmenu/PPJsonMenu.cpp
-
-HEADERS += $$PWD/RotateToolButton.h \
- $$PWD/userbutton/LUserButton.h \
- $$PWD/userbutton/UserWidget.h \
- $$PWD/userbutton/UserItemWidget.h \
- $$PWD/desktopbar/LDeskBar.h \
- $$PWD/systemtray/LSysTray.h \
- $$PWD/systemtray/TrayIcon.h \
- $$PWD/spacer/LSpacer.h \
- $$PWD/line/LLine.h \
- $$PWD/clock/LClock.h \
- $$PWD/battery/LBattery.h \
- $$PWD/desktopswitcher/LDesktopSwitcher.h \
- $$PWD/taskmanager/LTaskManagerPlugin.h \
- $$PWD/taskmanager/LTaskButton.h \
- $$PWD/systemdashboard/LSysDashboard.h \
- $$PWD/systemdashboard/SysMenuQuick.h \
- $$PWD/showdesktop/LHomeButton.h \
- $$PWD/appmenu/LAppMenuPlugin.h \
- $$PWD/applauncher/AppLaunchButton.h \
- $$PWD/systemstart/LStartButton.h \
- $$PWD/systemstart/StartMenu.h \
- $$PWD/systemstart/ItemWidget.h \
- $$PWD/audioplayer/LPAudioPlayer.h \
- $$PWD/audioplayer/PPlayerWidget.h \
- $$PWD/jsonmenu/PPJsonMenu.h
-# $$PWD/quickcontainer/QuickPPlugin.h
-
-FORMS += $$PWD/userbutton/UserWidget.ui \
- $$PWD/systemdashboard/SysMenuQuick.ui \
- $$PWD/systemstart/StartMenu.ui \
- $$PWD/audioplayer/PPlayerWidget.ui
-
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/quickcontainer/QuickPPlugin.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/quickcontainer/QuickPPlugin.h
deleted file mode 100644
index 6f61c4d5..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/quickcontainer/QuickPPlugin.h
+++ /dev/null
@@ -1,43 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This class is a simple container for a QtQuick plugin
-//===========================================
-#ifndef _LUMINA_DESKTOP_PANEL_PLUGIN_QUICK_H
-#define _LUMINA_DESKTOP_PANEL_PLUGIN_QUICK_H
-
-#include <QQuickWidget>
-#include <QVBoxLayout>
-#include "../LPPlugin.h"
-
-#include <LUtils.h>
-#include <QDebug>
-
-class QuickPPlugin : public LPPlugin{
- Q_OBJECT
-public:
- QuickPPlugin(QWidget* parent, QString ID, bool horizontal) : LPPlugin(parent, ID){
- container = new QQuickWidget(this);
- container->setResizeMode(QQuickWidget::SizeRootObjectToView);
- this->layout()->addWidget(container);
- horizontal = true; //just to silence compiler warning
- container->setSource(QUrl::fromLocalFile( LUtils::findQuickPluginFile(ID.section("---",0,0)) ));
- }
-
- ~QuickPPlugin(){}
-
-private:
- QQuickWidget *container;
-
-private slots:
- void statusChange(QQuickWidget::Status status){
- if(status == QQuickWidget::Error){
- qDebug() << "Quick Widget Error:" << this->type();
- }
- }
-
-};
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/showdesktop/LHomeButton.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/showdesktop/LHomeButton.cpp
deleted file mode 100644
index 6c259b16..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/showdesktop/LHomeButton.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LHomeButton.h"
-#include "../../LSession.h"
-
-#include <LuminaX11.h>
-
-LHomeButtonPlugin::LHomeButtonPlugin(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){
- button = new QToolButton(this);
- button->setAutoRaise(true);
- button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
-
- connect(button, SIGNAL(clicked()), this, SLOT(showDesktop()));
- this->layout()->setContentsMargins(0,0,0,0);
- this->layout()->addWidget(button);
-
- QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes
-}
-
-LHomeButtonPlugin::~LHomeButtonPlugin(){
-
-}
-
-void LHomeButtonPlugin::updateButtonVisuals(){
- button->setIcon( LXDG::findIcon("user-desktop", "") );
-}
-
-// ========================
-// PRIVATE FUNCTIONS
-// ========================
-void LHomeButtonPlugin::showDesktop(){
- QList<WId> wins = LSession::handle()->XCB->WindowList();
- for(int i=0; i<wins.length(); i++){
- if( LXCB::INVISIBLE != LSession::handle()->XCB->WindowState(wins[i]) ){
- LSession::handle()->XCB->MinimizeWindow(wins[i]);
- }
- }
-}
-
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/showdesktop/LHomeButton.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/showdesktop/LHomeButton.h
deleted file mode 100644
index 74aaf4fb..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/showdesktop/LHomeButton.h
+++ /dev/null
@@ -1,62 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This panel plugin is a simple button to hide all windows so the desktop is visible
-//===========================================
-#ifndef _LUMINA_DESKTOP_GO_HOME_PLUGIN_H
-#define _LUMINA_DESKTOP_GO_HOME_PLUGIN_H
-
-// Qt includes
-#include <QToolButton>
-#include <QString>
-#include <QWidget>
-
-
-// Lumina-desktop includes
-#include "../LPPlugin.h" //main plugin widget
-
-// libLumina includes
-#include "LuminaXDG.h"
-
-// PANEL PLUGIN BUTTON
-class LHomeButtonPlugin : public LPPlugin{
- Q_OBJECT
-
-public:
- LHomeButtonPlugin(QWidget *parent = 0, QString id = "homebutton", bool horizontal=true);
- ~LHomeButtonPlugin();
-
-private:
- QToolButton *button;
-
- void updateButtonVisuals();
-
-private slots:
- void showDesktop();
-
-public slots:
- void OrientationChange(){
- if(this->layout()->direction()==QBoxLayout::LeftToRight){
- this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
- button->setIconSize( QSize(this->height(), this->height()) );
- }else{
- this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
- button->setIconSize( QSize(this->width(), this->width()) );
- }
- this->layout()->update();
- updateButtonVisuals();
- }
-
- void LocaleChange(){
- updateButtonVisuals();
- }
-
- void ThemeChange(){
- updateButtonVisuals();
- }
-};
-
-#endif \ No newline at end of file
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/spacer/LSpacer.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/spacer/LSpacer.h
deleted file mode 100644
index 1e60c519..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/spacer/LSpacer.h
+++ /dev/null
@@ -1,34 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This class is a generic invisible spacer for the panel
-//===========================================
-#ifndef _LUMINA_DESKTOP_PANEL_PLUGIN_SPACER_H
-#define _LUMINA_DESKTOP_PANEL_PLUGIN_SPACER_H
-
-#include "../LPPlugin.h"
-
-class LSpacerPlugin : public LPPlugin{
- Q_OBJECT
-public:
- LSpacerPlugin(QWidget *parent=0, QString id="spacer", bool horizontal=true) : LPPlugin(parent, id, horizontal){
- if(horizontal){ this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); }
- else{ this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); }
- }
- ~LSpacerPlugin(){}
-
-public slots:
- void OrientationChange(){
- if(this->layout()->direction()==QBoxLayout::LeftToRight){ //horizontal
- this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
- }else{ //vertical
- this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
- }
- }
-};
-
-
-#endif \ No newline at end of file
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/LSysDashboard.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/LSysDashboard.cpp
deleted file mode 100644
index b9d70e97..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/LSysDashboard.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LSysDashboard.h"
-
-LSysDashboard::LSysDashboard(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){
- upTimer = new QTimer(this);
- upTimer->setInterval(10000); //10 second update ping
- connect(upTimer, SIGNAL(timeout()), this, SLOT(updateIcon()));
- button = new QToolButton(this);
- button->setAutoRaise(true);
- button->setToolButtonStyle(Qt::ToolButtonIconOnly);
- button->setPopupMode(QToolButton::DelayedPopup); //make sure it runs the update routine first
- connect(button, SIGNAL(clicked()), this, SLOT(openMenu()));
- this->layout()->setContentsMargins(0,0,0,0);
- this->layout()->addWidget(button);
- menu = new QMenu(this);
- connect(menu, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed()));
- sysmenu = new LSysMenuQuick(this);
- connect(sysmenu, SIGNAL(CloseMenu()), this, SLOT(closeMenu()) );
- mact = new QWidgetAction(this);
- mact->setDefaultWidget(sysmenu);
- menu->addAction(mact);
-
- button->setMenu(menu);
- QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes
-}
-
-LSysDashboard::~LSysDashboard(){
-
-}
-
-// ========================
-// PRIVATE FUNCTIONS
-// ========================
-void LSysDashboard::updateIcon(bool force){
- //For the visual, show battery state only if important
- static bool batcharging = false;
- QPixmap pix;
- button->setToolTip(tr("System Dashboard"));
- if(LOS::hasBattery()){
- int bat = LOS::batteryCharge();
- bool charging = LOS::batteryIsCharging();
- //Set the icon as necessary
- if(charging && !batcharging){
- //Charging and just plugged in
- if(bat < 15){ button->setIcon( LXDG::findIcon("battery-charging-low","") ); QTimer::singleShot(5000, this, SLOT(resetIcon()));}
- else if(bat < 30){ button->setIcon( LXDG::findIcon("battery-charging-caution","") ); QTimer::singleShot(5000, this, SLOT(resetIcon()));}
- else if(force || button->icon().isNull()){ resetIcon(); }
- }else if(!charging){
- //Not charging (critical level or just unplugged)
- if(bat<5){ button->setIcon( LXDG::findIcon("battery-missing","") ); }
- else if(bat < 15){ button->setIcon( LXDG::findIcon("battery-low","") ); QTimer::singleShot(5000, this, SLOT(resetIcon())); }
- else if(bat < 30 && batcharging){ button->setIcon( LXDG::findIcon("battery-caution","") ); QTimer::singleShot(5000, this, SLOT(resetIcon()));}
- else if(bat < 50 && batcharging){ button->setIcon( LXDG::findIcon("battery-040","")); QTimer::singleShot(5000, this, SLOT(resetIcon()));}
- else if(bat < 70 && batcharging){ button->setIcon( LXDG::findIcon("battery-060","")); QTimer::singleShot(5000, this, SLOT(resetIcon()));}
- else if(bat < 90 && batcharging){ button->setIcon( LXDG::findIcon("battery-080","")); QTimer::singleShot(5000, this, SLOT(resetIcon()));}
- else if(batcharging){ button->setIcon( LXDG::findIcon("battery-100","")); QTimer::singleShot(5000, this, SLOT(resetIcon()));}
- else if(force || button->icon().isNull()){ resetIcon(); }
- }else if(force || button->icon().isNull()){
- //Otherwise just use the default icon
- resetIcon();
- }
- //Save the values for comparison later
- batcharging = charging;
- if( !upTimer->isActive() ){ upTimer->start(); } //only use the timer if a battery is present
-
- // No battery - just use/set the normal icon
- }else if(force || button->icon().isNull()){
- resetIcon();
- if(upTimer->isActive() ){ upTimer->stop(); } //no battery available - no refresh timer needed
- }
-
-}
-
-void LSysDashboard::resetIcon(){
- button->setIcon( LXDG::findIcon("arrow-down-drop-circle",""));
-}
-
-void LSysDashboard::openMenu(){
- sysmenu->UpdateMenu();
- button->showMenu();
-}
-
-void LSysDashboard::closeMenu(){
- menu->hide();
-}
-
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/LSysDashboard.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/LSysDashboard.h
deleted file mode 100644
index 782fc4e6..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/LSysDashboard.h
+++ /dev/null
@@ -1,76 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This panel plugin allows the user to control different system settings
-// For example: screen brightness, audio volume, workspace, and battery
-//===========================================
-#ifndef _LUMINA_DESKTOP_SYSTEM_DASHBOARD_H
-#define _LUMINA_DESKTOP_SYSTEM_DASHBOARD_H
-
-//Qt includes
-
-#include <QHBoxLayout>
-#include <QDebug>
-#include <QCoreApplication>
-#include <QPainter>
-#include <QPixmap>
-#include <QWidgetAction>
-#include <QMenu>
-#include <QTimer>
-#include <QToolButton>
-
-//libLumina includes
-#include <LuminaOS.h>
-#include <LuminaXDG.h>
-
-//Local includes
-#include "../LPPlugin.h"
-#include "SysMenuQuick.h"
-
-class LSysDashboard : public LPPlugin{
- Q_OBJECT
-public:
- LSysDashboard(QWidget *parent = 0, QString id="systemdashboard", bool horizontal=true);
- ~LSysDashboard();
-
-private:
- QMenu *menu;
- QWidgetAction *mact;
- LSysMenuQuick *sysmenu;
- QToolButton *button;
- QTimer *upTimer;
-
-private slots:
- void updateIcon(bool force = false);
- void resetIcon();
- void openMenu();
- void closeMenu();
-
-public slots:
- void LocaleChange(){
- updateIcon(true);
- sysmenu->UpdateMenu();
- }
-
- void ThemeChange(){
- updateIcon(true);
- sysmenu->UpdateMenu();
- }
-
- void OrientationChange(){
- if(this->layout()->direction()==QBoxLayout::LeftToRight){
- this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
- button->setIconSize( QSize(this->height(), this->height()) );
- }else{
- this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
- button->setIconSize( QSize(this->width(), this->width()) );
- }
- updateIcon(true); //force icon refresh
- this->layout()->update();
- }
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/SysMenuQuick.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/SysMenuQuick.cpp
deleted file mode 100644
index 1d699ea9..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/SysMenuQuick.cpp
+++ /dev/null
@@ -1,211 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "SysMenuQuick.h"
-#include "ui_SysMenuQuick.h"
-
-#include "../../LSession.h"
-#include <LuminaX11.h>
-
-LSysMenuQuick::LSysMenuQuick(QWidget *parent) : QWidget(parent), ui(new Ui::LSysMenuQuick){
- ui->setupUi(this);
- brighttimer = new QTimer(this);
- brighttimer->setSingleShot(true);
- brighttimer->setInterval(50); //50ms delay in setting the new value
- //Now reset the initial saved settings (this is handles by the LOS/session now - 4/22/15)
- firstrun = true;
- UpdateMenu(); //do this once before all the signals/slots are connected below
- firstrun = false;
- //Now setup the connections
- connect(ui->slider_volume, SIGNAL(valueChanged(int)), this, SLOT(volSliderChanged()) );
- connect(ui->slider_brightness, SIGNAL(valueChanged(int)), this, SLOT(brightSliderChanged()) );
- connect(ui->tool_wk_prev, SIGNAL(clicked()), this, SLOT(prevWorkspace()) );
- connect(ui->tool_wk_next, SIGNAL(clicked()), this, SLOT(nextWorkspace()) );
- connect(ui->tool_logout, SIGNAL(clicked()), this, SLOT(startLogout()) );
- connect(ui->tool_vol_mixer, SIGNAL(clicked()), this, SLOT(startMixer()) );
- connect(brighttimer, SIGNAL(timeout()), this, SLOT(setCurrentBrightness()) );
- connect(ui->combo_locale, SIGNAL(currentIndexChanged(int)), this, SLOT(changeLocale()) );
- //And setup the default icons
- ui->label_bright_icon->setPixmap( LXDG::findIcon("preferences-system-power-management","").pixmap(ui->label_bright_icon->maximumSize()) );
- ui->tool_wk_prev->setIcon( LXDG::findIcon("go-previous-view",""));
- ui->tool_wk_next->setIcon( LXDG::findIcon("go-next-view","") );
- ui->tool_logout->setIcon( LXDG::findIcon("system-log-out","") );
-}
-
-LSysMenuQuick::~LSysMenuQuick(){
-
-}
-
-void LSysMenuQuick::UpdateMenu(){
- ui->retranslateUi(this);
- //Audio Volume
- int val = LOS::audioVolume();
- QIcon ico;
- if(val > 66){ ico= LXDG::findIcon("audio-volume-high",""); }
- else if(val > 33){ ico= LXDG::findIcon("audio-volume-medium",""); }
- else if(val > 0){ ico= LXDG::findIcon("audio-volume-low",""); }
- else{ ico= LXDG::findIcon("audio-volume-muted",""); }
- bool hasMixer = LOS::hasMixerUtility();
- ui->label_vol_icon->setVisible(!hasMixer);
- ui->tool_vol_mixer->setVisible(hasMixer);
- if(!hasMixer){ ui->label_vol_icon->setPixmap( ico.pixmap(ui->label_vol_icon->maximumSize()) ); }
- else{ ui->tool_vol_mixer->setIcon(ico); }
- QString txt = QString::number(val)+"%";
- if(val<100){ txt.prepend(" "); } //make sure no widget resizing
- ui->label_vol_text->setText(txt);
- if(ui->slider_volume->value()!= val){ ui->slider_volume->setValue(val); }
- //Screen Brightness
- val = LOS::ScreenBrightness();
- if(val < 0){
- //No brightness control - hide it
- ui->group_brightness->setVisible(false);
- }else{
- ui->group_brightness->setVisible(true);
- txt = QString::number(val)+"%";
- if(val<100){ txt.prepend(" "); } //make sure no widget resizing
- ui->label_bright_text->setText(txt);
- if(ui->slider_brightness->value()!=val){ ui->slider_brightness->setValue(val); }
- }
-
- //Do any one-time checks
- if(firstrun){
- hasBat = LOS::hasBattery(); //No need to check this more than once - will not change in the middle of a session
- //Current Locale
- QStringList locales = LUtils::knownLocales();
- ui->combo_locale->clear();
- QLocale curr;
- for(int i=0; i<locales.length(); i++){
- QLocale loc( (locales[i]=="pt") ? "pt_PT" : locales[i] );
- ui->combo_locale->addItem(loc.nativeLanguageName()+" ("+locales[i]+")", locales[i]); //Make the display text prettier later
- if(locales[i] == curr.name() || locales[i] == curr.name().section("_",0,0) ){
- //Current Locale
- ui->combo_locale->setCurrentIndex(ui->combo_locale->count()-1); //the last item in the list right now
- }
- }
- ui->group_locale->setVisible(locales.length() > 1);
- }
-
- //Battery Status
- if(hasBat){
- ui->group_battery->setVisible(true);
- val = LOS::batteryCharge();
- if(LOS::batteryIsCharging()){
- if(val < 15){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-charging-low","").pixmap(ui->label_bat_icon->maximumSize()) ); }
- else if(val < 30){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-charging-caution","").pixmap(ui->label_bat_icon->maximumSize()) ); }
- else if(val < 50){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-charging-040","").pixmap(ui->label_bat_icon->maximumSize()) ); }
- else if(val < 70){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-charging-060","").pixmap(ui->label_bat_icon->maximumSize()) ); }
- else if(val < 90){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-charging-080","").pixmap(ui->label_bat_icon->maximumSize()) ); }
- else{ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-charging","").pixmap(ui->label_bat_icon->maximumSize()) ); }
- ui->label_bat_text->setText( QString("%1%\n(%2)").arg(QString::number(val), tr("connected")) );
- }else{
- if(val < 1){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-missing","").pixmap(ui->label_bat_icon->maximumSize()) ); }
- else if(val < 15){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-low","").pixmap(ui->label_bat_icon->maximumSize()) ); }
- else if(val < 30){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-caution","").pixmap(ui->label_bat_icon->maximumSize()) ); }
- else if(val < 50){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-040","").pixmap(ui->label_bat_icon->maximumSize()) ); }
- else if(val < 70){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-060","").pixmap(ui->label_bat_icon->maximumSize()) ); }
- else if(val < 90){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-080","").pixmap(ui->label_bat_icon->maximumSize()) ); }
- else{ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-100","").pixmap(ui->label_bat_icon->maximumSize()) ); }
- ui->label_bat_text->setText( QString("%1%\n(%2)").arg(QString::number(val), getRemainingTime()) );
- }
- }else{
- ui->group_battery->setVisible(false);
- }
- //Workspace
- val = LSession::handle()->XCB->CurrentWorkspace();
- int tot = LSession::handle()->XCB->NumberOfWorkspaces();
- ui->group_workspace->setVisible(val>=0 && tot>1);
- ui->label_wk_text->setText( QString(tr("%1 of %2")).arg(QString::number(val+1), QString::number(tot)) );
-}
-
-void LSysMenuQuick::volSliderChanged(){
- int val = ui->slider_volume->value();
- LOS::setAudioVolume(val);
- QString txt = QString::number(val)+"%";
- if(val<100){ txt.prepend(" "); } //make sure no widget resizing
- ui->label_vol_text->setText( txt );
- if(val > 66){ ui->label_vol_icon->setPixmap( LXDG::findIcon("audio-volume-high","").pixmap(ui->label_vol_icon->maximumSize()) ); }
- else if(val > 33){ ui->label_vol_icon->setPixmap( LXDG::findIcon("audio-volume-medium","").pixmap(ui->label_vol_icon->maximumSize()) ); }
- else if(val > 0){ ui->label_vol_icon->setPixmap( LXDG::findIcon("audio-volume-low","").pixmap(ui->label_vol_icon->maximumSize()) ); }
- else{ ui->label_vol_icon->setPixmap( LXDG::findIcon("audio-volume-muted","").pixmap(ui->label_vol_icon->maximumSize()) ); }
-}
-
-void LSysMenuQuick::startMixer(){
- emit CloseMenu();
- LOS::startMixerUtility();
-}
-
-void LSysMenuQuick::brightSliderChanged(){
- //Brightness controls cannot operate extremely quickly - combine calls as necessary
- if(brighttimer->isActive()){ brighttimer->stop(); }
- brighttimer->start();
- //*DO* update the label right away
- int val = ui->slider_brightness->value();
- QString txt = QString::number(val)+"%";
- if(val<100){ txt.prepend(" "); } //make sure no widget resizing
- ui->label_bright_text->setText( txt );
-}
-
-void LSysMenuQuick::setCurrentBrightness(){
- int val = ui->slider_brightness->value();
- LOS::setScreenBrightness(val);
- QString txt = QString::number(val)+"%";
- if(val<100){ txt.prepend(" "); } //make sure no widget resizing
- ui->label_bright_text->setText( txt );
-}
-
-void LSysMenuQuick::nextWorkspace(){
- int cur = LSession::handle()->XCB->CurrentWorkspace();
- int tot = LSession::handle()->XCB->NumberOfWorkspaces();
- //qDebug()<< "Next Workspace:" << cur << tot;
- cur++;
- if(cur>=tot){ cur = 0; } //back to beginning
- //qDebug() << " - New Current:" << cur;
- LSession::handle()->XCB->SetCurrentWorkspace(cur);
-ui->label_wk_text->setText( QString(tr("%1 of %2")).arg(QString::number(cur+1), QString::number(tot)) );
-}
-
-void LSysMenuQuick::prevWorkspace(){
- int cur = LSession::handle()->XCB->CurrentWorkspace();
- int tot = LSession::handle()->XCB->NumberOfWorkspaces();
- cur--;
- if(cur<0){ cur = tot-1; } //back to last
- LSession::handle()->XCB->SetCurrentWorkspace(cur);
- ui->label_wk_text->setText( QString(tr("%1 of %2")).arg(QString::number(cur+1), QString::number(tot)) );
-}
-
-QString LSysMenuQuick::getRemainingTime(){
- int secs = LOS::batterySecondsLeft();
- if(secs < 0){ return "??"; }
- QString rem; //remaining
- if(secs > 3600){
- int hours = secs/3600;
- rem.append( QString::number(hours)+"h ");
- secs = secs - (hours*3600);
- }
- if(secs > 60){
- int min = secs/60;
- rem.append( QString::number(min)+"m ");
- secs = secs - (min*60);
- }
- if(secs > 0){
- rem.append( QString::number(secs)+"s");
- }else{
- rem.append( "0s" );
- }
- return rem;
-}
-
-void LSysMenuQuick::startLogout(){
- emit CloseMenu();
- LSession::handle()->systemWindow();
-}
-
-void LSysMenuQuick::changeLocale(){
- //Get the currently selected Locale
- QString locale = ui->combo_locale->currentData().toString();
- emit CloseMenu();
- LSession::handle()->switchLocale(locale);
-} \ No newline at end of file
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/SysMenuQuick.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/SysMenuQuick.h
deleted file mode 100644
index a300b5b1..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/SysMenuQuick.h
+++ /dev/null
@@ -1,54 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This panel plugin allows the user to control different system settings
-// For example: screen brightness, audio volume, workspace, and battery
-//===========================================
-#ifndef _LUMINA_PANEL_QUICK_SYSTEM_MENU_H
-#define _LUMINA_PANEL_QUICK_SYSTEM_MENU_H
-
-#include <QWidget>
-#include <QSettings>
-#include <QString>
-
-#include <LuminaOS.h>
-#include <LuminaXDG.h>
-
-namespace Ui{
- class LSysMenuQuick;
-};
-
-class LSysMenuQuick : public QWidget{
- Q_OBJECT
-public:
- LSysMenuQuick(QWidget *parent=0);
- ~LSysMenuQuick();
-
- void UpdateMenu();
-
-private:
- Ui::LSysMenuQuick *ui;
- QTimer *brighttimer;
- bool firstrun, hasBat;
- QString getRemainingTime(); //battery time left
-
-private slots:
- void volSliderChanged();
- void brightSliderChanged(); //start the delay/collection timer
- void setCurrentBrightness(); //perform the change
- void startMixer();
- void nextWorkspace();
- void prevWorkspace();
- void startLogout();
- void changeLocale();
-
-
-signals:
- void CloseMenu();
-
-};
-
-#endif \ No newline at end of file
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/SysMenuQuick.ui b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/SysMenuQuick.ui
deleted file mode 100644
index 26c32c74..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/SysMenuQuick.ui
+++ /dev/null
@@ -1,400 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>LSysMenuQuick</class>
- <widget class="QWidget" name="LSysMenuQuick">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>171</width>
- <height>317</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Form</string>
- </property>
- <property name="styleSheet">
- <string notr="true">/*QGroupBox{
-border-radius: 5px;
-border: 1px solid grey;
-margin-top: 1ex;
-}
-QGroupBox::title{
-subcontrol-origin: margin;
-subcontrol-position: top center;
-padding: 0 3px;
-background-color: rgba(255,255,255,255);
-border-radius: 5px;
-font: bold;
-}*/</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>1</number>
- </property>
- <property name="topMargin">
- <number>1</number>
- </property>
- <property name="rightMargin">
- <number>1</number>
- </property>
- <property name="bottomMargin">
- <number>1</number>
- </property>
- <item>
- <widget class="QGroupBox" name="group_volume">
- <property name="title">
- <string>System Volume</string>
- </property>
- <property name="flat">
- <bool>false</bool>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>2</number>
- </property>
- <property name="topMargin">
- <number>2</number>
- </property>
- <property name="rightMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>2</number>
- </property>
- <item>
- <widget class="QLabel" name="label_vol_icon">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="text">
- <string notr="true"/>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_vol_mixer">
- <property name="minimumSize">
- <size>
- <width>30</width>
- <height>30</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="toolTip">
- <string>Launch Audio Mixer</string>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="iconSize">
- <size>
- <width>30</width>
- <height>30</height>
- </size>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSlider" name="slider_volume">
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="value">
- <number>100</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_vol_text">
- <property name="text">
- <string notr="true">100%</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="group_brightness">
- <property name="title">
- <string>Screen Brightness</string>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>2</number>
- </property>
- <property name="topMargin">
- <number>2</number>
- </property>
- <property name="rightMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>2</number>
- </property>
- <item>
- <widget class="QLabel" name="label_bright_icon">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="text">
- <string notr="true"/>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSlider" name="slider_brightness">
- <property name="minimum">
- <number>10</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="value">
- <number>100</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_bright_text">
- <property name="text">
- <string notr="true">100%</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="group_battery">
- <property name="title">
- <string>Battery Status</string>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_3">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>2</number>
- </property>
- <property name="topMargin">
- <number>2</number>
- </property>
- <property name="rightMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>2</number>
- </property>
- <item>
- <widget class="QLabel" name="label_bat_icon">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="text">
- <string notr="true"/>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_bat_text">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string notr="true">100% (Plugged in)</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="group_workspace">
- <property name="title">
- <string>Workspace</string>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_4">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>2</number>
- </property>
- <property name="topMargin">
- <number>2</number>
- </property>
- <property name="rightMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>2</number>
- </property>
- <item>
- <widget class="QToolButton" name="tool_wk_prev">
- <property name="text">
- <string notr="true">prev</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_wk_text">
- <property name="text">
- <string notr="true">1 of 2</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_wk_next">
- <property name="text">
- <string notr="true">next</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="group_locale">
- <property name="title">
- <string>Locale</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>2</number>
- </property>
- <property name="topMargin">
- <number>2</number>
- </property>
- <property name="rightMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>2</number>
- </property>
- <item>
- <widget class="QComboBox" name="combo_locale"/>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_6">
- <item>
- <widget class="QToolButton" name="tool_logout">
- <property name="font">
- <font>
- <pointsize>9</pointsize>
- </font>
- </property>
- <property name="text">
- <string>Log Out</string>
- </property>
- <property name="iconSize">
- <size>
- <width>22</width>
- <height>22</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- <property name="autoRaise">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/ItemWidget.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/ItemWidget.cpp
deleted file mode 100644
index ea074a59..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/ItemWidget.cpp
+++ /dev/null
@@ -1,279 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "ItemWidget.h"
-#include <LUtils.h>
-#include <QMenu>
-#include "../../LSession.h"
-
-
-ItemWidget::ItemWidget(QWidget *parent, QString itemPath, QString type, bool goback) : QFrame(parent){
- createWidget();
- //Now fill it appropriately
- bool inHome = type.endsWith("-home"); //internal code
- if(inHome){ type = type.remove("-home"); }
- if(itemPath.endsWith(".desktop") || type=="app"){
- XDGDesktop item(itemPath, this);
- gooditem = item.isValid();
- //qDebug() << "Good Item:" << gooditem << itemPath;
- if(gooditem){
- icon->setPixmap( LXDG::findIcon(item.icon, "preferences-system-windows-actions").pixmap(32,32) );
- iconPath = item.icon;
- text = item.name;
- if(!item.genericName.isEmpty() && item.name!=item.genericName){ text.append("<br><i> -- "+item.genericName+"</i>"); }
- name->setText(text);
- name->setToolTip(item.comment);
- setupActions(&item);
- }else{
- return;
- }
- }else if(type=="dir"){
- actButton->setVisible(false);
- if(itemPath.endsWith("/")){ itemPath.chop(1); }
- if(goback){
- icon->setPixmap( LXDG::findIcon("go-previous","").pixmap(64,64) );
- iconPath = "go-previous";
- text = tr("Go Back");
- name->setText( text );
- }else{
- icon->setPixmap( LXDG::findIcon("folder","").pixmap(64,64) );
- iconPath = "folder";
- name->setText( itemPath.section("/",-1));
- text = itemPath.section("/",-1);
- }
- }else if(type.startsWith("chcat::::")){
- //Category given
- actButton->setVisible(false);
- iconPath = LXDG::DesktopCatToIcon(type.section("::::",1,50));
- if(goback){ iconPath = "go-previous"; type = "chcat::::"; itemPath = "<B>("+itemPath+")</B>"; }
- icon->setPixmap( LXDG::findIcon(iconPath,"applications-other").pixmap(64,64) );
- name->setText(itemPath);
- text = itemPath;
- icon->setWhatsThis(type);
- linkPath = type;
- }else{
- actButton->setVisible(false);
- if(itemPath.endsWith("/")){ itemPath.chop(1); }
- if(QFileInfo(itemPath).isDir()){
- type = "dir";
- icon->setPixmap( LXDG::findIcon("folder","").pixmap(64,64) );
- iconPath = "folder";
- }else if(LUtils::imageExtensions().contains(itemPath.section("/",-1).section(".",-1).toLower()) ){
- icon->setPixmap( QIcon(itemPath).pixmap(64,64) );
- }else{
- if( LUtils::isValidBinary(itemPath) ){ icon->setPixmap( LXDG::findIcon(type, "application-x-executable").pixmap(64,64) ); }
- else{ icon->setPixmap( LXDG::findMimeIcon(itemPath.section("/",-1)).pixmap(64,64) ); }
- }
- name->setText( itemPath.section("/",-1) ); //this->fontMetrics().elidedText(itemPath.section("/",-1), Qt::ElideRight, TEXTCUTOFF) );
- text = itemPath.section("/",-1) ;
- }
- icon->setWhatsThis(itemPath);
- if(!goback){ this->setWhatsThis(name->text()); }
- isDirectory = (type=="dir"); //save this for later
- if(LDesktopUtils::isFavorite(itemPath)){
- linkPath = itemPath;
- isShortcut=true;
- }else if( inHome ){//|| itemPath.section("/",0,-2)==QDir::homePath()+"/Desktop" ){
- isShortcut = true;
- }else{
- isShortcut = false;
- }
- if(isShortcut && name->toolTip().isEmpty()){
- name->setToolTip(icon->whatsThis()); //also allow the user to see the full shortcut path
- }
- //Now setup the button appropriately
- setupContextMenu();
-}
-
-// - Application constructor
-ItemWidget::ItemWidget(QWidget *parent, XDGDesktop *item) : QFrame(parent){
- createWidget();
- if(item==0){ gooditem = false; return; }
- isDirectory = false;
- if(LDesktopUtils::isFavorite(item->filePath)){
- linkPath = item->filePath;
- isShortcut=true;
- }else if( item->filePath.section("/",0,-2)==QDir::homePath()+"/Desktop" ){
- isShortcut = true;
- }else{
- isShortcut = false;
- }
- if(isShortcut){
- name->setToolTip(icon->whatsThis()); //also allow the user to see the full shortcut path
- }
- //Now fill it appropriately
- icon->setPixmap( LXDG::findIcon(item->icon,"preferences-system-windows-actions").pixmap(64,64) );
- text = item->name;
- if(!item->genericName.isEmpty() && item->name!=item->genericName){ text.append("<br><i> -- "+item->genericName+"</i>"); }
- name->setText(text);
- name->setToolTip(item->comment);
- this->setWhatsThis(item->name);
- icon->setWhatsThis(item->filePath);
- iconPath = item->icon;
- //Now setup the buttons appropriately
- setupContextMenu();
- setupActions(item);
-}
-
-ItemWidget::~ItemWidget(){
- icon->setPixmap(QPixmap()); //make sure the pixmap is cleared from memory too
- actButton->deleteLater();
- contextMenu->clear();
- contextMenu->deleteLater();
- if(actButton->menu()!=0){
- for(int i=0; i<actButton->menu()->actions().length(); i++){
- actButton->menu()->actions().at(i)->deleteLater();
- }
- actButton->menu()->deleteLater();
- }
- actButton->deleteLater();
- icon->deleteLater();
- name->deleteLater();
- menureset->deleteLater();
- linkPath.clear(); iconPath.clear(); text.clear();
-}
-
-void ItemWidget::triggerItem(){
- ItemClicked();
-}
-
-void ItemWidget::createWidget(){
- //Initialize the widgets
- gooditem = true;
- menuopen = false;
- menureset = new QTimer(this);
- menureset->setSingleShot(true);
- menureset->setInterval(1000); //1 second
- this->setContentsMargins(0,0,0,0);
- contextMenu = new QMenu(this);
- connect(contextMenu, SIGNAL(aboutToShow()), this, SLOT(actionMenuOpen()) );
- connect(contextMenu, SIGNAL(aboutToHide()), this, SLOT(actionMenuClosed()) );
- actButton = new QToolButton(this);
- actButton->setPopupMode(QToolButton::InstantPopup);
- actButton->setArrowType(Qt::DownArrow);
- icon = new QLabel(this);
- name = new QLabel(this);
- name->setWordWrap(true);
- name->setTextFormat(Qt::RichText);
- name->setTextInteractionFlags(Qt::NoTextInteraction);
- //Add them to the layout
- this->setLayout(new QHBoxLayout(this));
- this->layout()->setContentsMargins(1,1,1,1);
- this->layout()->addWidget(icon);
- this->layout()->addWidget(actButton);
- this->layout()->addWidget(name);
- //Set a custom object name so this can be tied into the Lumina Theme stylesheets
- this->setObjectName("LuminaItemWidget");
-}
-
-void ItemWidget::setupContextMenu(){
- //Now refresh the context menu
- contextMenu->clear();
- if(!QFile::exists(QDir::homePath()+"/Desktop/"+icon->whatsThis().section("/",-1)) ){
- //Does not have a desktop link
- contextMenu->addAction( LXDG::findIcon("preferences-desktop-icons",""), tr("Pin to Desktop"), this, SLOT(PinToDesktop()) );
- }
- //Favorite Item
- if( LDesktopUtils::isFavorite(icon->whatsThis()) ){ //Favorite Item - can always remove this
- contextMenu->addAction( LXDG::findIcon("edit-delete",""), tr("Remove from Favorites"), this, SLOT(RemoveFavorite()) );
- }else{
- //This file does not have a shortcut yet -- allow the user to add it
- contextMenu->addAction( LXDG::findIcon("bookmark-toolbar",""), tr("Add to Favorites"), this, SLOT(AddFavorite()) );
- }
- //QuickLaunch Item
- if(LSession::handle()->sessionSettings()->value("QuicklaunchApps",QStringList()).toStringList().contains(icon->whatsThis()) ){ //Favorite Item - can always remove this
- contextMenu->addAction( LXDG::findIcon("edit-delete",""), tr("Remove from Quicklaunch"), this, SLOT(RemoveQL()) );
- }else{
- //This file does not have a shortcut yet -- allow the user to add it
- contextMenu->addAction( LXDG::findIcon("quickopen",""), tr("Add to Quicklaunch"), this, SLOT(AddQL()) );
- }
-}
-
-void ItemWidget::setupActions(XDGDesktop *app){
- if(app==0 || app->actions.isEmpty()){ actButton->setVisible(false); return; }
- //Actions Available - go ahead and list them all
- actButton->setMenu( new QMenu(this) );
- for(int i=0; i<app->actions.length(); i++){
- QAction *act = new QAction(LXDG::findIcon(app->actions[i].icon, app->icon), app->actions[i].name, this);
- act->setToolTip(app->actions[i].ID);
- act->setWhatsThis(app->actions[i].ID);
- actButton->menu()->addAction(act);
- }
- connect(actButton->menu(), SIGNAL(triggered(QAction*)), this, SLOT(actionClicked(QAction*)) );
- connect(actButton->menu(), SIGNAL(aboutToShow()), this, SLOT(actionMenuOpen()) );
- connect(actButton->menu(), SIGNAL(aboutToHide()), this, SLOT(actionMenuClosed()) );
- connect(menureset, SIGNAL(timeout()), this, SLOT(resetmenuflag()) );
-}
-
-void ItemWidget::updateItems(){
- //update the text/icon to match sizes
- int H = 2.3*name->fontMetrics().height(); //make sure the height is large enough for two lines
- icon->setFixedSize(QSize(H-4, H-4));
- actButton->setFixedSize( QSize( (H-4)/2, H-4) );
- QStringList newname = text.split("<br>");
- for(int i=0; i<newname.length(); i++){ newname[i] = name->fontMetrics().elidedText(newname[i], Qt::ElideRight, name->width()); }
- name->setText( newname.join("<br>") );
- //Now reload the icon if necessary
- if(icon->pixmap()!=0){
- if(icon->pixmap()->size().height() < (H-4) ){
- if(iconPath.isEmpty()){
- //Use item path (thumbnail or mimetype)
- if(LUtils::imageExtensions().contains(icon->whatsThis().section("/",-1).section(".",-1).toLower()) ){
- icon->setPixmap( QIcon(icon->whatsThis()).pixmap(H-4,H-4).scaledToHeight(H-4,Qt::SmoothTransformation) );
- }else{
- icon->setPixmap( LXDG::findMimeIcon(icon->whatsThis().section("/",-1)).pixmap(H-4,H-4).scaledToHeight(H-4,Qt::SmoothTransformation) );
- }
- }else{
- icon->setPixmap( LXDG::findIcon(iconPath,"preferences-system-windows-actions").pixmap(H-4,H-4).scaledToHeight(H-4,Qt::SmoothTransformation) );
- }
- }else if(icon->pixmap()->size().height() > (H-4) ){
- icon->setPixmap( icon->pixmap()->scaled(H-4, H-4, Qt::IgnoreAspectRatio, Qt::SmoothTransformation) );
- }
- }
-}
-
-void ItemWidget::PinToDesktop(){
- qDebug() << "Create Link on Desktop:" << icon->whatsThis();
- bool ok = QFile::link(icon->whatsThis(), QDir::homePath()+"/Desktop/"+icon->whatsThis().section("/",-1));
- qDebug() << " - " << (ok ? "Success": "Failure");
-}
-
-void ItemWidget::RemoveFavorite(){
- LDesktopUtils::removeFavorite(icon->whatsThis());
- linkPath.clear();
- emit RemovedShortcut();
-}
-
-void ItemWidget::AddFavorite(){
- if( LDesktopUtils::addFavorite(icon->whatsThis()) ){
- linkPath = icon->whatsThis();
- emit NewShortcut();
- }
-
-}
-void ItemWidget::RemoveQL(){
- qDebug() << "Remove QuickLaunch Button:" << icon->whatsThis();
- emit toggleQuickLaunch(icon->whatsThis(), false);
-}
-
-void ItemWidget::AddQL(){
- qDebug() << "Add QuickLaunch Button:" << icon->whatsThis();
- emit toggleQuickLaunch(icon->whatsThis(), true);
-}
-
-
-void ItemWidget::ItemClicked(){
- if(!linkPath.isEmpty()){ emit RunItem(linkPath); }
- else{ emit RunItem(icon->whatsThis()); }
-}
-
-void ItemWidget::actionClicked(QAction *act){
- actButton->menu()->hide();
- QString cmd = "lumina-open -action \""+act->whatsThis()+"\" \"%1\"";
- if(!linkPath.isEmpty()){ cmd = cmd.arg(linkPath); }
- else{ cmd = cmd.arg(icon->whatsThis()); }
- emit RunItem(cmd);
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/ItemWidget.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/ItemWidget.h
deleted file mode 100644
index 11394dd6..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/ItemWidget.h
+++ /dev/null
@@ -1,98 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This item widget manages a single file/directory
-//===========================================
-#ifndef _LUMINA_PANEL_SYSTEM_START_ITEM_WIDGET_H
-#define _LUMINA_PANEL_SYSTEM_START_ITEM_WIDGET_H
-
-#include <QFrame>
-#include <QLabel>
-#include <QToolButton>
-#include <QString>
-#include <QHBoxLayout>
-#include <QSize>
-#include <QDir>
-#include <QFile>
-#include <QMouseEvent>
-#include <QAction>
-#include <QMenu>
-#include <QTimer>
-#include <QResizeEvent>
-
-#include <LuminaXDG.h>
-
-class ItemWidget : public QFrame{
- Q_OBJECT
-public:
- //Overloaded Constructors for various uses
- // - Favorites (path/type)
- ItemWidget(QWidget *parent=0, QString itemPath="", QString type="unknown", bool goback=false);
- // - Generic Apps
- ItemWidget(QWidget *parent=0, XDGDesktop *item= 0);
-
- ~ItemWidget();
-
- bool gooditem;
-
- void triggerItem(); //trigger this item - just as if it was clicked on
-
-private:
- QToolButton *actButton;
- QMenu *contextMenu;
- QLabel *icon, *name;
- bool isDirectory, isShortcut, menuopen;
- QString linkPath, iconPath, text;
- QTimer *menureset;
-
- void createWidget();
-
- void setupContextMenu();
- void setupActions(XDGDesktop*);
-
- void updateItems(); //update the text/icon to match sizes
-
-private slots:
- void PinToDesktop();
- void RemoveFavorite();
- void AddFavorite();
- void RemoveQL();
- void AddQL();
- void ItemClicked();
- void actionClicked(QAction*);
- //Functions to fix the submenu open/close issues
- void actionMenuOpen(){
- if(menureset->isActive()){ menureset->stop(); }
- menuopen = true;
- }
- void resetmenuflag(){ menuopen = false; } //tied to the "menureset" timer
- void actionMenuClosed(){ menureset->start(); }
-
-
-protected:
- void mouseReleaseEvent(QMouseEvent *event){
- if(menuopen){ resetmenuflag(); } //skip this event if a submenu was open
- else if(event->button() == Qt::RightButton && !icon->whatsThis().startsWith("chcat::::") ){
- menuopen = true;
- setupContextMenu();
- contextMenu->popup(event->globalPos());
- }else if(event->button() != Qt::NoButton){ ItemClicked(); }
- }
-
- void resizeEvent(QResizeEvent *ev){
- updateItems(); //update the sizing of everything
- QFrame::resizeEvent(ev); // do the normal procedures
- }
-
-signals:
- void NewShortcut();
- void RemovedShortcut();
- void RunItem(QString cmd);
- void toggleQuickLaunch(QString path, bool ok);
-
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/LStartButton.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/LStartButton.cpp
deleted file mode 100644
index f44add77..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/LStartButton.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LStartButton.h"
-#include "../../LSession.h"
-
-#include <LuminaXDG.h>
-#include <LUtils.h> //This contains the "ResizeMenu" class
-
-LStartButtonPlugin::LStartButtonPlugin(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){
- button = new QToolButton(this);
- button->setAutoRaise(true);
- button->setToolButtonStyle(Qt::ToolButtonIconOnly);
- button->setPopupMode(QToolButton::DelayedPopup); //make sure it runs the update routine first
- connect(button, SIGNAL(clicked()), this, SLOT(openMenu()));
- this->layout()->setContentsMargins(0,0,0,0);
- this->layout()->addWidget(button);
- menu = new ResizeMenu(this);
- menu->setContentsMargins(1,1,1,1);
- connect(menu, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed()));
- connect(menu, SIGNAL(MenuResized(QSize)), this, SLOT(SaveMenuSize(QSize)) );
- startmenu = new StartMenu(this);
- connect(startmenu, SIGNAL(CloseMenu()), this, SLOT(closeMenu()) );
- connect(startmenu, SIGNAL(UpdateQuickLaunch(QStringList)), this, SLOT(updateQuickLaunch(QStringList)));
- menu->setContents(startmenu);
- QSize saved = LSession::handle()->DesktopPluginSettings()->value("panelPlugs/"+this->type()+"/MenuSize", QSize(0,0)).toSize();
- if(!saved.isNull()){ startmenu->setFixedSize(saved); } //re-load the previously saved value
-
- button->setMenu(menu);
- connect(menu, SIGNAL(aboutToHide()), this, SLOT(updateButtonVisuals()) );
- QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes
- QTimer::singleShot(0, startmenu, SLOT(ReLoadQuickLaunch()) );
- //Setup the global shortcut handling for opening the start menu
- connect(QApplication::instance(), SIGNAL(StartButtonActivated()), this, SLOT(shortcutActivated()) );
- LSession::handle()->registerStartButton(this->type());
-}
-
-LStartButtonPlugin::~LStartButtonPlugin(){
- LSession::handle()->unregisterStartButton(this->type());
-}
-
-void LStartButtonPlugin::updateButtonVisuals(){
- button->setToolTip(tr(""));
- button->setText( SYSTEM::user() );
- button->setIcon( LXDG::findIcon("start-here-lumina","Lumina-DE") ); //force icon refresh
-}
-
-void LStartButtonPlugin::updateQuickLaunch(QStringList apps){
- //First clear any obsolete apps
- QStringList old;
- //qDebug() << "Update QuickLaunch Buttons";
- for(int i=0; i<QUICKL.length(); i++){
- if( !apps.contains(QUICKL[i]->whatsThis()) ){
- //App was removed
- QUICKL.takeAt(i)->deleteLater();
- i--;
- }else{
- //App still listed - update the button
- old << QUICKL[i]->whatsThis(); //add the list of current buttons
- LFileInfo info(QUICKL[i]->whatsThis());
- QUICKL[i]->setIcon( LXDG::findIcon(info.iconfile(),"unknown") );
- if(info.isDesktopFile()){ QUICKL[i]->setToolTip( info.XDG()->name ); }
- else{ QUICKL[i]->setToolTip( info.fileName() ); }
- }
- }
- //Now go through and create any new buttons
- for(int i=0; i<apps.length(); i++){
- if( !old.contains(apps[i]) ){
- //New App
- LQuickLaunchButton *tmp = new LQuickLaunchButton(apps[i], this);
- QUICKL << tmp;
- LFileInfo info(apps[i]);
- tmp->setIcon( LXDG::findIcon( info.iconfile() ) );
- if(info.isDesktopFile()){ tmp->setToolTip( info.XDG()->name ); }
- else{ tmp->setToolTip( info.fileName() ); }
- //Now add the button to the layout and connect the signal/slots
- this->layout()->insertWidget(i+1,tmp); //"button" is always in slot 0
- connect(tmp, SIGNAL(Launch(QString)), this, SLOT(LaunchQuick(QString)) );
- connect(tmp, SIGNAL(Remove(QString)), this, SLOT(RemoveQuick(QString)) );
- }
- }
- //qDebug() << " - Done updateing QuickLaunch Buttons";
- QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes
-}
-
-void LStartButtonPlugin::LaunchQuick(QString file){
- //Need to get which button was clicked
- //qDebug() << "Quick Launch triggered:" << file;
- if(!file.isEmpty()){
- LSession::LaunchApplication("lumina-open \""+file+"\"");
- emit MenuClosed();
- }
-}
-
-void LStartButtonPlugin::RemoveQuick(QString file){
- //qDebug() << "Remove Quicklaunch Button:" << file;
- if(!file.isEmpty()){
- startmenu->UpdateQuickLaunch(file, false); //always a removal
- emit MenuClosed();
- }
-}
-
-void LStartButtonPlugin::SaveMenuSize(QSize sz){
- //Save this size for the menu
- LSession::handle()->DesktopPluginSettings()->setValue("panelPlugs/"+this->type()+"/MenuSize", sz);
-}
-
-// ========================
-// PRIVATE FUNCTIONS
-// ========================
-void LStartButtonPlugin::openMenu(){
- if(menu->isVisible()){ return; } //don't re-show it - already open
- //TESTING CODE TO SEE IF THIS MAKES IT RECOVER MEMORY
- /*StartMenu *old = startmenu;
- startmenu = new StartMenu(this);
- connect(startmenu, SIGNAL(CloseMenu()), this, SLOT(closeMenu()) );
- connect(startmenu, SIGNAL(UpdateQuickLaunch(QStringList)), this, SLOT(updateQuickLaunch(QStringList)));
- menu->setContents(startmenu);
- if(old!=0){ old->deleteLater(); }*/
-//--------
- startmenu->UpdateMenu();
- button->showMenu();
-}
-
-void LStartButtonPlugin::closeMenu(){
- menu->hide();
-}
-
-void LStartButtonPlugin::shortcutActivated(){
- if(LSession::handle()->registerStartButton(this->type())){
- if(menu->isVisible()){ closeMenu(); }
- else{ this->activateWindow(); openMenu(); }
- }
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/LStartButton.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/LStartButton.h
deleted file mode 100644
index d46bb1be..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/LStartButton.h
+++ /dev/null
@@ -1,113 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This panel plugin is the main button that allow the user to run
-// applications or logout of the desktop
-//===========================================
-#ifndef _LUMINA_DESKTOP_START_MENU_PLUGIN_H
-#define _LUMINA_DESKTOP_START_MENU_PLUGIN_H
-
-// Qt includes
-#include <QMenu>
-#include <QWidgetAction>
-#include <QToolButton>
-#include <QString>
-#include <QWidget>
-#include <QMenu>
-
-// Lumina-desktop includes
-//#include "../../Globals.h"
-#include "../LPPlugin.h" //main plugin widget
-
-// libLumina includes
-#include <LuminaXDG.h>
-#include <LUtils.h>
-#include <ResizeMenu.h>
-
-#include "StartMenu.h"
-
-//Simple Tool Button For QuickLaunch Items
-class LQuickLaunchButton : public QToolButton{
- Q_OBJECT
-signals:
- void Launch(QString);
- void Remove(QString);
-
-private slots:
- void rmentry(){
- emit Remove(this->whatsThis());
- }
- void launchentry(){
- emit Launch(this->whatsThis());
- }
-
-public:
- LQuickLaunchButton(QString path, QWidget* parent = 0) : QToolButton(parent){
- this->setWhatsThis(path);
- this->setMenu(new QMenu(this));
- this->setContextMenuPolicy(Qt::CustomContextMenu);
- this->menu()->addAction( LXDG::findIcon("edit-delete",""), tr("Remove from Quicklaunch"), this, SLOT(rmentry()) );
- connect(this, SIGNAL(clicked()), this, SLOT(launchentry()) );
- connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showMenu()) );
- }
- ~LQuickLaunchButton(){}
-
-};
-
-// PANEL PLUGIN BUTTON
-class LStartButtonPlugin : public LPPlugin{
- Q_OBJECT
-
-public:
- LStartButtonPlugin(QWidget *parent = 0, QString id = "systemstart", bool horizontal=true);
- ~LStartButtonPlugin();
-
-private:
- ResizeMenu *menu;
- //QWidgetAction *mact;
- StartMenu *startmenu;
- QToolButton *button;
- QList<LQuickLaunchButton*> QUICKL;
-
-private slots:
- void openMenu();
- void closeMenu();
- void shortcutActivated();
-
- void updateButtonVisuals();
-
- void updateQuickLaunch(QStringList);
- void LaunchQuick(QString);
- void RemoveQuick(QString);
- void SaveMenuSize(QSize);
-
-public slots:
- void OrientationChange(){
- if(this->layout()->direction()==QBoxLayout::LeftToRight){
- this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
- button->setIconSize( QSize(this->height(), this->height()) );
- for(int i=0; i<QUICKL.length(); i++){ QUICKL[i]->setIconSize(QSize(this->height(), this->height())); }
- }else{
- this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
- button->setIconSize( QSize(this->width(), this->width()) );
- for(int i=0; i<QUICKL.length(); i++){ QUICKL[i]->setIconSize(QSize(this->width(), this->width())); }
- }
- this->layout()->update();
- updateButtonVisuals();
- }
-
- void LocaleChange(){
- updateButtonVisuals();
- if(startmenu!=0){ startmenu->UpdateAll(); }
- }
-
- void ThemeChange(){
- updateButtonVisuals();
- if(startmenu!=0){ startmenu->UpdateAll(); }
- }
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/StartMenu.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/StartMenu.cpp
deleted file mode 100644
index d05ba22f..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/StartMenu.cpp
+++ /dev/null
@@ -1,720 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "StartMenu.h"
-#include "ui_StartMenu.h"
-//#include <QtConcurrent>
-
-#include <LuminaOS.h>
-#include "../../LSession.h"
-#include <QtConcurrent>
-#include <QMessageBox>
-
-#include "ItemWidget.h"
-//#define SSAVER QString("xscreensaver-demo")
-
-StartMenu::StartMenu(QWidget *parent) : QWidget(parent), ui(new Ui::StartMenu){
- ui->setupUi(this); //load the designer file
- this->setMouseTracking(true);
- searchTimer = new QTimer(this);
- searchTimer->setInterval(300); //~1/3 second
- searchTimer->setSingleShot(true);
- connect(searchTimer, SIGNAL(timeout()), this, SLOT(startSearch()) );
- connect(LSession::handle()->applicationMenu(), SIGNAL(AppMenuUpdated()), this, SLOT(UpdateApps()) );
- connect(LSession::handle(), SIGNAL(FavoritesChanged()), this, SLOT(UpdateFavs()) );
- //Need to load the last used setting of the application list
- QString state = LSession::handle()->DesktopPluginSettings()->value("panelPlugs/systemstart/showcategories", "partial").toString();
- if(state=="partial"){ui->check_apps_showcats->setCheckState(Qt::PartiallyChecked); }
- else if(state=="true"){ ui->check_apps_showcats->setCheckState(Qt::Checked); }
- else{ ui->check_apps_showcats->setCheckState(Qt::Unchecked); }
- connect(ui->check_apps_showcats, SIGNAL(stateChanged(int)), this, SLOT(catViewChanged()) );
- UpdateAll();
- QTimer::singleShot(10, this,SLOT(UpdateApps()));
- QTimer::singleShot(10, this, SLOT(UpdateFavs()));
-}
-
-StartMenu::~StartMenu(){
-
-}
-
-void StartMenu::UpdateAll(){
- //Update all the icons/text on all the pages
-
- // Update Text
- ui->retranslateUi(this);
-
- //Update Icons
- ui->tool_goto_apps->setIcon(LXDG::findIcon("system-run",""));
- ui->tool_goto_settings->setIcon(LXDG::findIcon("preferences-system",""));
- ui->tool_launch_fm->setIcon(LXDG::findIcon("user-home",""));
- ui->tool_launch_desksettings->setIcon(LXDG::findIcon("preferences-desktop",""));
- ui->tool_lock->setIcon(LXDG::findIcon("system-lock-screen",""));
- ui->tool_goto_logout->setIcon(LXDG::findIcon("system-log-out",""));
- ui->tool_back->setIcon(LXDG::findIcon("go-previous",""));
- ui->tool_launch_deskinfo->setIcon(LXDG::findIcon("system-help",""));
-
- ui->tool_launch_mixer->setIcon( LXDG::findIcon("preferences-desktop-sound","") );
- ui->label_bright_icon->setPixmap( LXDG::findIcon("preferences-system-power-management","").pixmap(ui->tool_goto_apps->iconSize()) );
- ui->label_locale_icon->setPixmap( LXDG::findIcon("preferences-desktop-locale","").pixmap(ui->tool_goto_apps->iconSize()) );
- ui->tool_set_nextwkspace->setIcon(LXDG::findIcon("go-next-view",""));
- ui->tool_set_prevwkspace->setIcon(LXDG::findIcon("go-previous-view",""));
- ui->tool_logout->setIcon(LXDG::findIcon("system-log-out",""));
- ui->tool_restart->setIcon(LXDG::findIcon("system-reboot",""));
- ui->tool_shutdown->setIcon(LXDG::findIcon("system-shutdown",""));
- ui->tool_suspend->setIcon(LXDG::findIcon("system-suspend",""));
-
- //Update Visibility of system/session/OS options
- // -- Control Panel
- QString tmp = LOS::ControlPanelShortcut();
- if(QFile::exists(tmp)){
- ui->tool_launch_controlpanel->setWhatsThis(tmp);
- //Now read the file to see which icon to use
- XDGDesktop desk(tmp);
- if(desk.isValid()){
- ui->tool_launch_controlpanel->setIcon(LXDG::findIcon(desk.icon,"preferences-other"));
- }else{ ui->tool_launch_controlpanel->setVisible(false); }
- }else{ ui->tool_launch_controlpanel->setVisible(false); }
- // -- App Store
- tmp = LOS::AppStoreShortcut();
- if(QFile::exists(tmp)){
- ui->tool_launch_store->setWhatsThis(tmp);
- //Now read the file to see which icon to use
- XDGDesktop desk(tmp);
- if(desk.isValid()){
- ui->tool_launch_store->setIcon(LXDG::findIcon(desk.icon,"utilities-file-archiver"));
- }else{ ui->tool_launch_store->setVisible(false); }
- }else{ ui->tool_launch_store->setVisible(false); }
- //Audio Controls
- ui->frame_audio->setVisible( LOS::audioVolume() >=0 );
- //Brightness controls
- ui->frame_bright->setVisible( LOS::ScreenBrightness() >=0 );
- //Shutdown/restart
- bool ok = LOS::userHasShutdownAccess();
- ui->frame_leave_system->setWhatsThis(ok ? "allowed": "");
- ui->frame_leave_system->setVisible(ok);
- //Battery Availability
- ok = LOS::hasBattery();
- ui->label_status_battery->setWhatsThis(ok ? "allowed": "");
- ui->label_status_battery->setVisible(ok);
- //Locale availability
- QStringList locales = LUtils::knownLocales();
- ui->stackedWidget->setCurrentWidget(ui->page_main); //need to ensure the settings page is not active
- ui->combo_locale->clear();
- QString curr = LUtils::currentLocale();
- //qDebug() << "Update Locales:" << locales;
- //qDebug() << "Current Locale:" << curr;
- for(int i=0; i<locales.length(); i++){
- QLocale loc( (locales[i]=="pt") ? "pt_PT" : locales[i] );
- ui->combo_locale->addItem(loc.nativeLanguageName() +" ("+locales[i]+")", locales[i]); //Make the display text prettier later
- if(locales[i] == curr || locales[i] == curr.section("_",0,0) ){
- //Current Locale
- ui->combo_locale->setCurrentIndex(ui->combo_locale->count()-1); //the last item in the list right now
- }
- }
- ui->frame_locale->setVisible(locales.length() > 1);
- //User Name in status bar
- ui->label_status->setText( QString::fromLocal8Bit(getlogin()) );
- //Lumina Utilities
- ui->tool_launch_desksettings->setVisible(LUtils::isValidBinary("lumina-config"));
- ui->tool_launch_deskinfo->setVisible(LUtils::isValidBinary("lumina-info"));
-
-}
-
-void StartMenu::UpdateMenu(bool forceall){
- //qDebug() << "Update Menu" << forceall;
- ui->line_search->clear();
- if(forceall){ UpdateAll(); }
- //Quick update routine before the menu is made visible
- //qDebug() << "update favs";
- //UpdateFavs();
- //qDebug() << "check page";
- if(ui->stackedWidget->currentWidget() != ui->page_main){
- ui->stackedWidget->setCurrentWidget(ui->page_main); //just show the main page
- }else{
- on_stackedWidget_currentChanged(0); //refresh/update the main page every time
- }
- //qDebug() << "done";
-}
-
-void StartMenu::ReLoadQuickLaunch(){
- emit UpdateQuickLaunch( LSession::handle()->sessionSettings()->value("QuicklaunchApps",QStringList()).toStringList() );
-}
-
-void StartMenu::UpdateQuickLaunch(QString path, bool keep){
- QStringList QL = LSession::handle()->sessionSettings()->value("QuicklaunchApps",QStringList()).toStringList();
- if(keep){QL << path; }
- else{ QL.removeAll(path); }
- QL.removeDuplicates();
- LSession::handle()->sessionSettings()->setValue("QuicklaunchApps",QL);
- //LSession::handle()->sessionSettings()->sync();
- emit UpdateQuickLaunch(QL);
-}
-
-// ==========================
-// PRIVATE FUNCTIONS
-// ==========================
-/*void StartMenu::deleteChildren(QWidget *obj){
- if(obj->layout()==0){
- for(int i=0; i<obj->children().count(); i++){
- obj->children().at(i)->deleteLater();
- }
- }else{
-
- }
-}*/
-
-void StartMenu::ClearScrollArea(QScrollArea *area){
- //QWidget *old = area->takeWidget();
- //qDebug() << "Clear Scroll Area:";
- //if(old->layout()!=0){ qDebug() << " - Number of items in layout:" << old->layout()->count(); }
- //qDebug() << " - Number of Children:" << old->children().count();
- //deleteChildren(old); //make sure we *fully* delete these items to save memory
- //old->deleteLater();
- if(area == ui->scroll_favs){
- area->takeWidget()->deleteLater();
- }
- if(area->widget()==0){
- area->setWidget( new QWidget(area) ); //create a new widget in the scroll area
- }
- if(area->widget()->layout()==0){
- QVBoxLayout *layout = new QVBoxLayout(area->widget());
- layout->setSpacing(2);
- layout->setContentsMargins(3,1,3,1);
- layout->setDirection(QBoxLayout::TopToBottom);
- layout->setAlignment(Qt::AlignTop);
- area->widget()->setContentsMargins(0,0,0,0);
- area->widget()->setLayout(layout);
- }
- //Now clear the items in the layout
- while( area->widget()->layout()->count() >0 ){
- QLayoutItem *it = area->widget()->layout()->takeAt(0);
- //Need to delete both the widget and the layout item
- if(it->widget()!=0){ it->widget()->deleteLater(); }
- delete it;
- }
-}
-
-void StartMenu::SortScrollArea(QScrollArea *area){
- //qDebug() << "Sorting Scroll Area:";
- //Sort all the items in the scroll area alphabetically
- QLayout *lay = area->widget()->layout();
- QStringList items;
- for(int i=0; i<lay->count(); i++){
- items << lay->itemAt(i)->widget()->whatsThis();
- }
-
- items.sort();
- //qDebug() << " - Sorted Items:" << items;
- for(int i=0; i<items.length(); i++){
- if(items[i].isEmpty()){ continue; }
- //QLayouts are weird in that they can only add items to the end - need to re-insert almost every item
- for(int j=0; j<lay->count(); j++){
- //Find this item
- if(lay->itemAt(j)->widget()->whatsThis()==items[i]){
- //Found it - now move it if necessary
- //qDebug() << "Found Item:" << items[i] << i << j;
- lay->addItem( lay->takeAt(j) );
- break;
- }
- }
- }
-}
-
-void StartMenu::do_search(QString search, bool force){
- search = search.simplified(); //remove unneccesary whitespace
- if(search == CSearch && !force){
- //nothing new - just ensure the page is visible
- if(ui->stackedWidget->currentWidget()!=ui->page_search ){ ui->stackedWidget->setCurrentWidget(ui->page_search); }
- return;
- }else if(search.isEmpty()){
- CSearch.clear();
- if(ui->stackedWidget->currentWidget()==ui->page_search ){ on_tool_back_clicked(); }
- return;
- }
- //Got a search term - check it
- CSearch = search; //save this for comparison later
- qDebug() << "Search for term:" << search;
- ClearScrollArea(ui->scroll_search);
- topsearch.clear();
- //Now find any items which match the search
- QStringList found; //syntax: [<sorter>::::<mimetype>::::<filepath>]
- QString tmp = search;
- if(LUtils::isValidBinary(tmp)){ found << "0::::application/x-executable::::"+tmp; }
- QList<XDGDesktop*> apps = LSession::handle()->applicationMenu()->currentAppHash()->value("All");
- for(int i=0; i<apps.length(); i++){
- int priority = -1;
- if(apps[i]->name.toLower()==search.toLower()){ priority = 10; }
- else if(apps[i]->name.startsWith(search, Qt::CaseInsensitive)){ priority = 15; }
- else if(apps[i]->name.contains(search, Qt::CaseInsensitive)){ priority = 19; }
- else if(apps[i]->genericName.contains(search, Qt::CaseInsensitive)){ priority = 20; }
- else if(apps[i]->comment.contains(search, Qt::CaseInsensitive)){ priority = 30; }
- //Can add other filters here later
-
- if(priority>0){
- found << QString::number(priority)+"::::app::::"+apps[i]->filePath;
- }
- }
- found.sort(Qt::CaseInsensitive); //sort by priority/type (lower numbers are higher on list)
- //qDebug() << "Sorted Items:" << found;
- //Now add the items to the menu in order
- for(int i=0; i<found.length(); i++){
- if( !QFile::exists(found[i].section("::::",2,-1)) ){ continue; } //invalid favorite - skip it
- if(topsearch.isEmpty()){ topsearch = found[i].section("::::",2,-1); }
- ItemWidget *it = 0;
- if( found[i].section("::::",2,-1).endsWith(".desktop")){
- XDGDesktop item(found[i].section("::::",2,-1));
- if(item.isValid()){ it = new ItemWidget(ui->scroll_favs->widget(), &item); }
- }else{
- it = new ItemWidget(ui->scroll_favs->widget(), found[i].section("::::",2,-1), found[i].section("::::",1,1) );
- }
- if(it==0){ continue; }
- if(!it->gooditem){ it->deleteLater(); continue; } //invalid for some reason
- ui->scroll_search->widget()->layout()->addWidget(it);
- connect(it, SIGNAL(NewShortcut()), this, SLOT(UpdateFavs()) );
- connect(it, SIGNAL(RemovedShortcut()), this, SLOT(UpdateFavs()) );
- connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) );
- connect(it, SIGNAL(toggleQuickLaunch(QString, bool)), this, SLOT(UpdateQuickLaunch(QString, bool)) );
- if(i%3==0){
- QApplication::processEvents();
- if(searchTimer->isActive()){ return; } //search changed - go ahead and stop here
- }
- }
- ui->stackedWidget->setCurrentWidget(ui->page_search);
-}
-
-bool StartMenu::promptAboutUpdates(bool &skip){
- QString pending = LOS::systemPendingUpdates();
- if(pending.isEmpty()){ skip = false; } //continue without skip
- else{
- QMessageBox dlg(QMessageBox::Question, tr("Apply Updates?"), tr("You have system updates waiting to be applied! Do you wish to install them now?"), QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, this);
- dlg.setDetailedText(pending);
- dlg.setDefaultButton(QMessageBox::Yes);
- dlg.show();
- int ret = dlg.exec();
- if(ret == QMessageBox::Cancel){ return false; } //do not continue
- else{ skip = (ret==QMessageBox::No); }
- }
- return true;
-}
-
-// ========================
-// PRIVATE SLOTS
-// ========================
-void StartMenu::LaunchItem(QString path, bool fix){
- if(path.startsWith("chcat::::")){
- ChangeCategory(path.section("::::",1,50));
- return;
- }
- qDebug() << "Launching Item:" << path << fix;
- if(!path.isEmpty()){
- qDebug() << "Launch Application:" << path;
- if( fix && !path.startsWith("lumina-open") ){ LSession::LaunchApplication("lumina-open \""+path+"\""); }
- else{ LSession::LaunchApplication(path); }
- emit CloseMenu(); //so the menu container will close
- }
-}
-
-void StartMenu::ChangeCategory(QString cat){
- //This only happens on user interaction - make sure to run the update routine in a separate thread
- CCat = cat;
- UpdateApps();
- //QtConcurrent::run(this, &StartMenu::UpdateApps);
-}
-
-//Listing Update routines
-void StartMenu::UpdateApps(){
- ClearScrollArea(ui->scroll_apps);
- //Now assemble the apps list
- //qDebug() << "Update Apps:";// << CCat << ui->check_apps_showcats->checkState();
- if(ui->check_apps_showcats->checkState() == Qt::PartiallyChecked){
- //qDebug() << " - Partially Checked";
- //Show a single page of apps, but still divided up by categories
- CCat.clear();
- QStringList cats = LSession::handle()->applicationMenu()->currentAppHash()->keys();
- cats.sort();
- cats.removeAll("All");
- for(int c=0; c<cats.length(); c++){
- QList<XDGDesktop*> apps = LSession::handle()->applicationMenu()->currentAppHash()->value(cats[c]);
- if(apps.isEmpty()){ continue; }
- //Add the category label to the scroll
- QLabel *catlabel = new QLabel("<b>"+cats[c]+"</b>",ui->scroll_apps->widget());
- catlabel->setAlignment(Qt::AlignCenter);
- ui->scroll_apps->widget()->layout()->addWidget(catlabel);
- //Now add all the apps for this category
- for(int i=0; i<apps.length(); i++){
- ItemWidget *it = new ItemWidget(ui->scroll_apps->widget(), apps[i] );
- if(!it->gooditem){ qDebug() << "Invalid Item:"; it->deleteLater(); continue; } //invalid for some reason
- ui->scroll_apps->widget()->layout()->addWidget(it);
- connect(it, SIGNAL(NewShortcut()), this, SLOT(UpdateFavs()) );
- connect(it, SIGNAL(RemovedShortcut()), this, SLOT(UpdateFavs()) );
- connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) );
- connect(it, SIGNAL(toggleQuickLaunch(QString, bool)), this, SLOT(UpdateQuickLaunch(QString, bool)) );
- }
- }
-
- }else if(ui->check_apps_showcats->checkState() == Qt::Checked){
- //qDebug() << " - Checked";
- //Only show categories to start with - and have the user click-into a cat to see apps
- if(CCat.isEmpty()){
- //No cat selected yet - show cats only
- QStringList cats = LSession::handle()->applicationMenu()->currentAppHash()->keys();
- cats.sort();
- cats.removeAll("All"); //This is not a "real" category
- for(int c=0; c<cats.length(); c++){
- ItemWidget *it = new ItemWidget(ui->scroll_apps->widget(), cats[c], "chcat::::"+cats[c] );
- if(!it->gooditem){ qDebug() << "Invalid Item:";it->deleteLater(); continue; } //invalid for some reason
- ui->scroll_apps->widget()->layout()->addWidget(it);
- connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) );
- }
- }else{
- //qDebug() << "Show Apps For category:" << CCat;
- //Show the "go back" button
- ItemWidget *it = new ItemWidget(ui->scroll_apps->widget(), CCat, "chcat::::"+CCat, true);
- //if(!it->gooditem){ continue; } //invalid for some reason
- ui->scroll_apps->widget()->layout()->addWidget(it);
- connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) );
- //Show apps for this cat
- QList<XDGDesktop*> apps = LSession::handle()->applicationMenu()->currentAppHash()->value(CCat);
- for(int i=0; i<apps.length(); i++){
- //qDebug() << " - App:" << apps[i].name;
- ItemWidget *it = new ItemWidget(ui->scroll_apps->widget(), apps[i] );
- if(!it->gooditem){ qDebug() << "Invalid Item:"; it->deleteLater(); continue; } //invalid for some reason
- ui->scroll_apps->widget()->layout()->addWidget(it);
- connect(it, SIGNAL(NewShortcut()), this, SLOT(UpdateFavs()) );
- connect(it, SIGNAL(RemovedShortcut()), this, SLOT(UpdateFavs()) );
- connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) );
- connect(it, SIGNAL(toggleQuickLaunch(QString, bool)), this, SLOT(UpdateQuickLaunch(QString, bool)) );
- }
- }
-
- }else{
- //qDebug() << " - Not Checked";
- //No categories at all - just alphabetize all the apps
- QList<XDGDesktop*> apps = LSession::handle()->applicationMenu()->currentAppHash()->value("All");
- CCat.clear();
- //Now add all the apps for this category
- for(int i=0; i<apps.length(); i++){
- ItemWidget *it = new ItemWidget(ui->scroll_apps->widget(), apps[i] );
- if(!it->gooditem){ it->deleteLater(); continue; } //invalid for some reason
- ui->scroll_apps->widget()->layout()->addWidget(it);
- connect(it, SIGNAL(NewShortcut()), this, SLOT(UpdateFavs()) );
- connect(it, SIGNAL(RemovedShortcut()), this, SLOT(UpdateFavs()) );
- connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) );
- connect(it, SIGNAL(toggleQuickLaunch(QString, bool)), this, SLOT(UpdateQuickLaunch(QString, bool)) );
- }
- }
-
-
-}
-
-void StartMenu::UpdateFavs(){
- //SYNTAX NOTE: (per-line) "<name>::::[dir/app/<mimetype>]::::<path>"
- QStringList newfavs = LDesktopUtils::listFavorites();
- if(favs == newfavs){ return; } //nothing to do - same as before
- favs = newfavs;
- ClearScrollArea(ui->scroll_favs);
- favs.sort();
- //Iterate over types of favorites
- QStringList rest = favs;
- QStringList tmp;
- for(int type = 0; type<3; type++){
- if(type==0){ tmp = favs.filter("::::app::::"); } //apps first
- else if(type==1){ tmp = favs.filter("::::dir::::"); } //dirs next
- else{ tmp = rest; } //everything left over
- if(type==1){
- SortScrollArea(ui->scroll_favs);
- //Need to run a special routine for sorting the apps (already in the widget)
- //qDebug() << "Sort App Widgets...";
- // Since each app actually might have a different name listed within the file
- /*QLayout *lay = ui->scroll_favs->widget()->layout();
- QStringList items;
- for(int i=0; i<lay->count(); i++){
- items << lay->itemAt(i)->widget()->whatsThis().toLower();
- }
-
- items.sort();
- // qDebug() << " - Sorted Items:" << items;
- for(int i=0; i<items.length(); i++){
- if(items[i].isEmpty()){ continue; }
- //QLayouts are weird in that they can only add items to the end - need to re-insert almost every item
- for(int j=0; j<lay->count(); j++){
- //Find this item
- if(lay->itemAt(j)->widget()->whatsThis().toLower()==items[i]){
- //Found it - now move it if necessary
- //qDebug() << "Found Item:" << items[i] << i << j;
- lay->addItem( lay->takeAt(j) );
- break;
- }
- }
- }*/
-
- }//end of special app sorting routine
- tmp.sort(); //Sort alphabetically by name (dirs/files)
- for(int i=0; i<tmp.length(); i++){
- if(type<2){ rest.removeAll(tmp[i]); }
- if( !QFile::exists(tmp[i].section("::::",2,-1)) ){ continue; } //invalid favorite - skip it
- ItemWidget *it = 0;
- if( tmp[i].section("::::",2,-1).endsWith(".desktop")){
- XDGDesktop item(tmp[i].section("::::",2,-1));
- if(item.isValid()){ it = new ItemWidget(ui->scroll_favs->widget(), &item); }
- }else{
- it = new ItemWidget(ui->scroll_favs->widget(), tmp[i].section("::::",2,-1), tmp[i].section("::::",1,1) );
- }
- if(it==0){ continue; }
- if(!it->gooditem){ it->deleteLater(); continue; } //invalid for some reason
- ui->scroll_favs->widget()->layout()->addWidget(it);
- connect(it, SIGNAL(NewShortcut()), this, SLOT(UpdateFavs()) );
- connect(it, SIGNAL(RemovedShortcut()), this, SLOT(UpdateFavs()) );
- connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) );
- connect(it, SIGNAL(toggleQuickLaunch(QString, bool)), this, SLOT(UpdateQuickLaunch(QString, bool)) );
- }
- //QApplication::processEvents();
- } //end loop over types
- ui->scroll_favs->update();
- //qDebug() << "End updateFavs";
-}
-
-// Page update routines
-void StartMenu::on_stackedWidget_currentChanged(int val){
- QWidget *page = ui->stackedWidget->widget(val);
- ui->tool_back->setVisible(page != ui->page_main);
- ui->line_search->setFocus();
-
- //Now the page specific updates
- if(page == ui->page_main){
- if(!ui->label_status_battery->whatsThis().isEmpty()){
- //Battery available - update the status button
- int charge = LOS::batteryCharge();
- QString TT, ICON;
- if(charge<=5){ ICON="-caution"; }
- else if(charge<=20){ ICON="-040"; }
- else if(charge<=70){ ICON="-060"; }
- else if(charge<=90){ ICON="-080"; }
- else{ ICON="-100"; }
- if(LOS::batteryIsCharging()){
- if(charge>=80){ ICON.clear(); } //for charging, there is no suffix to the icon name over 80%
- ICON.prepend("battery-charging");
- TT = QString(tr("%1% (Plugged In)")).arg(QString::number(charge));
- }else{
- ICON.prepend("battery");
- int secs = LOS::batterySecondsLeft();
- if(secs>1){ TT = QString(tr("%1% (%2 Estimated)")).arg(QString::number(charge), LUtils::SecondsToDisplay(secs)); }
- else{ TT = QString(tr("%1% Remaining")).arg(QString::number(charge)); }
- }
- //qDebug() << " Battery Icon:" << ICON << val << TT
- ui->label_status_battery->setPixmap( LXDG::findIcon(ICON,"").pixmap(ui->tool_goto_apps->iconSize()/2) );
- ui->label_status_battery->setToolTip(TT);
- }
- //Network Status
- ui->label_status_network->clear(); //not implemented yet
- }else if(page == ui->page_apps){
- //Nothing needed for this page explicitly
- }else if( page == ui->page_settings){
- // -- Workspaces
- int tot = LSession::handle()->XCB->NumberOfWorkspaces();
- if(tot>1){
- ui->frame_wkspace->setVisible(true);
- int cur = LSession::handle()->XCB->CurrentWorkspace();
- ui->label_wkspace->setText( QString(tr("Workspace %1/%2")).arg(QString::number(cur+1), QString::number(tot)) );
- }else{
- ui->frame_wkspace->setVisible(false);
- }
- // -- Brightness Controls
- int tmp = LOS::ScreenBrightness();
- ui->frame_bright->setVisible(tmp >= 0);
- if(tmp >= 0){ ui->slider_bright->setValue(tmp); }
- // -- Audio Controls
- tmp = LOS::audioVolume();
- ui->frame_audio->setVisible(tmp >= 0);
- if(tmp >= 0){ ui->slider_volume->setValue(tmp); }
- }else if(page == ui->page_leave){
- if( !ui->frame_leave_system->whatsThis().isEmpty() ){
- //This frame is allowed/visible - need to adjust the shutdown detection
- bool updating = LOS::systemPerformingUpdates();
- ui->tool_restart->setEnabled(!updating);
- ui->tool_shutdown->setEnabled(!updating);
- ui->label_updating->setVisible(updating); //to let the user know *why* they can't shutdown/restart right now
- }
- ui->frame_leave_suspend->setVisible( LOS::systemCanSuspend() );
- }
-
-}
-
-void StartMenu::catViewChanged(){
- QString state;
- switch(ui->check_apps_showcats->checkState()){
- case Qt::Checked:
- state = "true";
- break;
- case Qt::PartiallyChecked:
- state = "partial";
- break;
- default:
- state = "false";
- }
- LSession::handle()->DesktopPluginSettings()->setValue("panelPlugs/systemstart/showcategories", state);
- //Now kick off the reload of the apps list
- UpdateApps();
- //QtConcurrent::run(this, &StartMenu::UpdateApps); //this was a direct user change - keep it thread safe
-}
-//Page Change Buttons
-void StartMenu::on_tool_goto_apps_clicked(){
- ui->stackedWidget->setCurrentWidget(ui->page_apps);
-}
-
-void StartMenu::on_tool_goto_settings_clicked(){
- ui->stackedWidget->setCurrentWidget(ui->page_settings);
-}
-
-void StartMenu::on_tool_goto_logout_clicked(){
- ui->stackedWidget->setCurrentWidget(ui->page_leave);
-}
-
-void StartMenu::on_tool_back_clicked(){
- ui->stackedWidget->setCurrentWidget(ui->page_main);
-}
-
-
-//Launch Buttons
-void StartMenu::on_tool_launch_controlpanel_clicked(){
- LaunchItem(ui->tool_launch_controlpanel->whatsThis());
-}
-
-void StartMenu::on_tool_launch_fm_clicked(){
- LaunchItem(QDir::homePath());
-}
-
-void StartMenu::on_tool_launch_store_clicked(){
- LaunchItem(ui->tool_launch_store->whatsThis());
-}
-
-void StartMenu::on_tool_launch_desksettings_clicked(){
- LaunchItem("lumina-config", false);
-}
-
-void StartMenu::on_tool_launch_deskinfo_clicked(){
- LaunchItem("lumina-info",false);
-}
-
-//Logout Buttons
-void StartMenu::on_tool_lock_clicked(){
- //QProcess::startDetached("xscreensaver-command -lock");
- LaunchItem("xscreensaver-command -lock",false);
-}
-
-void StartMenu::on_tool_logout_clicked(){
- emit CloseMenu();
- LSession::handle()->StartLogout();
-}
-
-void StartMenu::on_tool_restart_clicked(){
- emit CloseMenu();
- QCoreApplication::processEvents();
- bool skipupdates = false;
- if( !promptAboutUpdates(skipupdates) ){ return; }
- LSession::handle()->StartReboot(skipupdates);
-}
-
-void StartMenu::on_tool_shutdown_clicked(){
- emit CloseMenu();
- QCoreApplication::processEvents();
- bool skipupdates = false;
- if( !promptAboutUpdates(skipupdates) ){ return; }
- LSession::handle()->StartShutdown(skipupdates);
-}
-
-void StartMenu::on_tool_suspend_clicked(){
- //Make sure to lock the system first (otherwise anybody can access it again)
- emit CloseMenu();
- LUtils::runCmd("xscreensaver-command -lock");
- LOS::systemSuspend();
-}
-
-
-//Audio Volume
-void StartMenu::on_slider_volume_valueChanged(int val){
- ui->label_vol->setText(QString::number(val)+"%");
- LOS::setAudioVolume(val);
- //Also adjust the icon for the volume
- if(val<1){ ui->tool_mute_audio->setIcon(LXDG::findIcon("audio-volume-muted","")); }
- else if(val<33){ ui->tool_mute_audio->setIcon(LXDG::findIcon("audio-volume-low","")); }
- else if(val<66){ ui->tool_mute_audio->setIcon(LXDG::findIcon("audio-volume-medium","")); }
- else{ ui->tool_mute_audio->setIcon(LXDG::findIcon("audio-volume-high","")); }
-}
-
-void StartMenu::on_tool_launch_mixer_clicked(){
- if(LOS::hasMixerUtility()){
- emit CloseMenu();
- LOS::startMixerUtility();
- }
-}
-
-void StartMenu::on_tool_mute_audio_clicked(){
- static int lastvol = 50;
- if(ui->slider_volume->value()==0){ ui->slider_volume->setValue(lastvol); }
- else{
- lastvol = ui->slider_volume->value();
- ui->slider_volume->setValue(0);
- }
-}
-
-//Screen Brightness
-void StartMenu::on_slider_bright_valueChanged(int val){
- ui->label_bright->setText(QString::number(val)+"%");
- LOS::setScreenBrightness(val);
-}
-
-
-//Workspace
-void StartMenu::on_tool_set_nextwkspace_clicked(){
- int cur = LSession::handle()->XCB->CurrentWorkspace();
- int tot = LSession::handle()->XCB->NumberOfWorkspaces();
- //qDebug()<< "Next Workspace:" << cur << tot;
- cur++;
- if(cur>=tot){ cur = 0; } //back to beginning
- //qDebug() << " - New Current:" << cur;
- LSession::handle()->XCB->SetCurrentWorkspace(cur);
- ui->label_wkspace->setText( QString(tr("Workspace %1/%2")).arg(QString::number(cur+1), QString::number(tot)) );
-}
-
-void StartMenu::on_tool_set_prevwkspace_clicked(){
- int cur = LSession::handle()->XCB->CurrentWorkspace();
- int tot = LSession::handle()->XCB->NumberOfWorkspaces();
- //qDebug()<< "Next Workspace:" << cur << tot;
- cur--;
- if(cur<0){ cur = tot-1; } //back to end
- //qDebug() << " - New Current:" << cur;
- LSession::handle()->XCB->SetCurrentWorkspace(cur);
- ui->label_wkspace->setText( QString(tr("Workspace %1/%2")).arg(QString::number(cur+1), QString::number(tot)) );
-}
-
-
-//Locale
-void StartMenu::on_combo_locale_currentIndexChanged(int){
- //Get the currently selected Locale
- if(ui->stackedWidget->currentWidget()!=ui->page_settings){ return; }
- QString locale = ui->combo_locale->currentData().toString();
- emit CloseMenu();
- LSession::processEvents();
- LSession::handle()->switchLocale(locale);
-}
-
-
-//Search
-void StartMenu::on_line_search_textEdited(QString){
- if(searchTimer->isActive()){ searchTimer->stop(); }
- searchTimer->start();
-}
-
-void StartMenu::startSearch(){
- if(!this->isVisible()){ return; } //menu closed while timer was active
- do_search(ui->line_search->text(),false); //auto-launched
-}
-
-void StartMenu::on_line_search_returnPressed(){
- if(topsearch.isEmpty()){ return; }
- LaunchItem(topsearch);
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/StartMenu.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/StartMenu.h
deleted file mode 100644
index 8ab04d94..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/StartMenu.h
+++ /dev/null
@@ -1,105 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_DESKTOP_SYSTEM_START_PANEL_PLUGIN_H
-#define _LUMINA_DESKTOP_SYSTEM_START_PANEL_PLUGIN_H
-
-#include <QWidget>
-#include <QScrollArea>
-#include <QMouseEvent>
-
-#include <LuminaXDG.h>
-
-namespace Ui{
- class StartMenu;
-};
-
-class StartMenu : public QWidget{
- Q_OBJECT
-public:
- StartMenu(QWidget *parent = 0);
- ~StartMenu();
-
-public slots:
- void UpdateAll(); //for re-translation/icon changes
- void UpdateMenu(bool forceall = false); //for item changes
-
- void ReLoadQuickLaunch();
- void UpdateQuickLaunch(QString, bool);
-
-private:
- Ui::StartMenu *ui;
- QStringList favs;
- QString CCat, CSearch, topsearch; //current category/search
- QTimer *searchTimer;
-
- //Simple utility functions
- //void deleteChildren(QWidget *obj); //recursive function
- void ClearScrollArea(QScrollArea *area);
- void SortScrollArea(QScrollArea *area);
- void do_search(QString search, bool force);
-
- bool promptAboutUpdates(bool &skip);
-
-private slots:
- void LaunchItem(QString path, bool fix = true);
-
- //Application/Favorite Listings
- void ChangeCategory(QString cat);
- void UpdateApps();
- void UpdateFavs();
-
- // Page update routines
- void on_stackedWidget_currentChanged(int); //page changed
- void catViewChanged(); //application categorization view mode changed
-
- //Page Change Buttons
- void on_tool_goto_apps_clicked();
- void on_tool_goto_settings_clicked();
- void on_tool_goto_logout_clicked();
- void on_tool_back_clicked();
-
- //Launch Buttons
- void on_tool_launch_controlpanel_clicked();
- void on_tool_launch_fm_clicked();
- void on_tool_launch_store_clicked();
- void on_tool_launch_desksettings_clicked();
- void on_tool_launch_deskinfo_clicked();
-
- //Logout Buttons
- void on_tool_lock_clicked();
- void on_tool_logout_clicked();
- void on_tool_restart_clicked();
- void on_tool_shutdown_clicked();
- void on_tool_suspend_clicked();
-
- //Audio Volume
- void on_slider_volume_valueChanged(int);
- void on_tool_launch_mixer_clicked();
- void on_tool_mute_audio_clicked();
-
- //Screen Brightness
- void on_slider_bright_valueChanged(int);
-
- //Workspace
- void on_tool_set_nextwkspace_clicked();
- void on_tool_set_prevwkspace_clicked();
-
- //Locale
- void on_combo_locale_currentIndexChanged(int);
-
- //Search
- void on_line_search_textEdited(QString);
- void startSearch();
- void on_line_search_returnPressed();
-
-signals:
- void CloseMenu();
- void UpdateQuickLaunch(QStringList);
-
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/StartMenu.ui b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/StartMenu.ui
deleted file mode 100644
index 74f61d7f..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemstart/StartMenu.ui
+++ /dev/null
@@ -1,1148 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>StartMenu</class>
- <widget class="QWidget" name="StartMenu">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>181</width>
- <height>405</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Form</string>
- </property>
- <property name="styleSheet">
- <string notr="true">QScrollArea{background: transparent; border: none; }</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>1</number>
- </property>
- <property name="topMargin">
- <number>1</number>
- </property>
- <property name="rightMargin">
- <number>1</number>
- </property>
- <property name="bottomMargin">
- <number>1</number>
- </property>
- <item>
- <widget class="QLineEdit" name="line_search">
- <property name="placeholderText">
- <string>Type to search</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QStackedWidget" name="stackedWidget">
- <property name="currentIndex">
- <number>4</number>
- </property>
- <widget class="QWidget" name="page_main">
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QLabel" name="label_status_battery">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string notr="true">bat%</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_status_network">
- <property name="text">
- <string notr="true">netstat</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_status">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string notr="true"/>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="Line" name="line_14">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QScrollArea" name="scroll_favs">
- <property name="contextMenuPolicy">
- <enum>Qt::CustomContextMenu</enum>
- </property>
- <property name="styleSheet">
- <string notr="true"/>
- </property>
- <property name="frameShape">
- <enum>QFrame::NoFrame</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Plain</enum>
- </property>
- <property name="verticalScrollBarPolicy">
- <enum>Qt::ScrollBarAsNeeded</enum>
- </property>
- <property name="horizontalScrollBarPolicy">
- <enum>Qt::ScrollBarAlwaysOff</enum>
- </property>
- <property name="sizeAdjustPolicy">
- <enum>QAbstractScrollArea::AdjustToContents</enum>
- </property>
- <property name="widgetResizable">
- <bool>true</bool>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <widget class="QWidget" name="scrollAreaWidgetContents">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>179</width>
- <height>177</height>
- </rect>
- </property>
- </widget>
- </widget>
- </item>
- <item>
- <widget class="Line" name="line_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_launch_fm">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string>Browse Files</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_goto_apps">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string>Browse Applications</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="Line" name="line">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_launch_controlpanel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string>Control Panel</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_goto_settings">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string>Preferences</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="popupMode">
- <enum>QToolButton::InstantPopup</enum>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="Line" name="line_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_6">
- <item>
- <widget class="QToolButton" name="tool_goto_logout">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="styleSheet">
- <string notr="true">QToolButton::menu-arrow{ image: rightarrow-icon; }</string>
- </property>
- <property name="text">
- <string>Leave</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="popupMode">
- <enum>QToolButton::DelayedPopup</enum>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- <property name="arrowType">
- <enum>Qt::NoArrow</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_lock">
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string notr="true">lock</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="page_apps">
- <layout class="QVBoxLayout" name="verticalLayout_3">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QToolButton" name="tool_launch_store">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string>Manage Applications</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="Line" name="line_15">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="check_apps_showcats">
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string>Show Categories</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- <property name="tristate">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="Line" name="line_4">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QScrollArea" name="scroll_apps">
- <property name="horizontalScrollBarPolicy">
- <enum>Qt::ScrollBarAlwaysOff</enum>
- </property>
- <property name="sizeAdjustPolicy">
- <enum>QAbstractScrollArea::AdjustToContents</enum>
- </property>
- <property name="widgetResizable">
- <bool>true</bool>
- </property>
- <widget class="QWidget" name="scrollAreaWidgetContents_2">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>179</width>
- <height>284</height>
- </rect>
- </property>
- </widget>
- </widget>
- </item>
- <item>
- <widget class="Line" name="line_5">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="page_settings">
- <layout class="QVBoxLayout" name="verticalLayout_9">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_7">
- <item>
- <widget class="QToolButton" name="tool_launch_desksettings">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string>Configure Desktop</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_launch_deskinfo">
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string notr="true">info</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="Line" name="line_8">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QFrame" name="frame_audio">
- <property name="frameShape">
- <enum>QFrame::NoFrame</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_8">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_5">
- <item>
- <widget class="QToolButton" name="tool_mute_audio">
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string notr="true"/>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_11">
- <item>
- <widget class="QSlider" name="slider_volume">
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_vol">
- <property name="text">
- <string notr="true">vol%</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QToolButton" name="tool_launch_mixer">
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string notr="true"/>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="autoRaise">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="Line" name="line_7">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QFrame" name="frame_bright">
- <property name="frameShape">
- <enum>QFrame::NoFrame</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_7">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_3">
- <item>
- <widget class="QLabel" name="label_bright_icon">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="text">
- <string notr="true"/>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSlider" name="slider_bright">
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="minimum">
- <number>10</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_bright">
- <property name="text">
- <string notr="true">br%</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="Line" name="line_9">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QFrame" name="frame_wkspace">
- <property name="frameShape">
- <enum>QFrame::NoFrame</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_4">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_4">
- <item>
- <widget class="QToolButton" name="tool_set_prevwkspace">
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string notr="true">prev</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_wkspace">
- <property name="text">
- <string notr="true">workspace #</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_set_nextwkspace">
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string notr="true">next</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="Line" name="line_10">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QFrame" name="frame_locale">
- <property name="frameShape">
- <enum>QFrame::NoFrame</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QLabel" name="label_locale_icon">
- <property name="text">
- <string notr="true">Locale:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QComboBox" name="combo_locale">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>161</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="Line" name="line_6">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="page_leave">
- <layout class="QVBoxLayout" name="verticalLayout_6">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>185</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QFrame" name="frame_leave_suspend">
- <property name="frameShape">
- <enum>QFrame::NoFrame</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_10">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QToolButton" name="tool_suspend">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string>Suspend System</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="Line" name="line_11">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QFrame" name="frame_leave_system">
- <property name="styleSheet">
- <string notr="true">QFrame#frame_leave_system{border: none; background: transparent; }</string>
- </property>
- <property name="frameShape">
- <enum>QFrame::NoFrame</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_5">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QToolButton" name="tool_restart">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string>Restart System</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_shutdown">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string>Power Off System</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_updating">
- <property name="text">
- <string>(System Performing Updates)</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="Line" name="line_13">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_logout">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string>Sign Out User</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="Line" name="line_12">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="page_search">
- <layout class="QVBoxLayout" name="verticalLayout_12">
- <item>
- <widget class="QScrollArea" name="scroll_search">
- <property name="widgetResizable">
- <bool>true</bool>
- </property>
- <widget class="QWidget" name="scrollAreaWidgetContents_3">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>161</width>
- <height>332</height>
- </rect>
- </property>
- </widget>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_back">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="text">
- <string>Back</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- <property name="arrowType">
- <enum>Qt::NoArrow</enum>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemtray/LSysTray.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemtray/LSysTray.cpp
deleted file mode 100644
index a71fd57e..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemtray/LSysTray.cpp
+++ /dev/null
@@ -1,167 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2012-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LSysTray.h"
-#include "../../LSession.h"
-
-LSysTray::LSysTray(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){
- frame = new QFrame(this);
- frame->setContentsMargins(0,0,0,0);
- //frame->setStyleSheet("QFrame{ background: transparent; border: 1px solid transparent; border-radius: 3px; }");
- LI = new QBoxLayout( this->layout()->direction());
- frame->setLayout(LI);
- LI->setAlignment(Qt::AlignCenter);
- LI->setSpacing(0);
- LI->setContentsMargins(0,0,0,0);
- this->layout()->addWidget(frame);
- this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
- //TrayID=0;
- upTimer = new QTimer(this);
- upTimer->setInterval(300000); //maximum time between refreshes is 5 minutes
- connect(upTimer, SIGNAL(timeout()), this, SLOT(checkAll()) );
- isRunning = false; stopping = false; checking = false; pending = false;
- QTimer::singleShot(100, this, SLOT(start()) );
- //Also do one extra check a minute or so after startup (just in case something got missed in the initial flood of registrations)
- QTimer::singleShot(90000,this, SLOT(checkAll()) );
- connect(LSession::handle(), SIGNAL(TrayListChanged()), this, SLOT(checkAll()) );
- connect(LSession::handle(), SIGNAL(TrayIconChanged(WId)), this, SLOT(UpdateTrayWindow(WId)) );
- connect(LSession::handle(), SIGNAL(VisualTrayAvailable()), this, SLOT(start()) );
-}
-
-LSysTray::~LSysTray(){
- if(isRunning){
- this->stop();
- }
-}
-
-void LSysTray::start(){
- if(isRunning || stopping){ return; } //already running
- isRunning = LSession::handle()->registerVisualTray(this->winId());
- qDebug() << "Visual Tray Started:" << this->type() << isRunning;
- if(isRunning){
- //upTimer->start();
- QTimer::singleShot(0,this, SLOT(checkAll()) );
- }
-}
-
-void LSysTray::stop(){
- if(!isRunning){ return; }
- stopping = true;
- upTimer->stop();
- //Now close down the system tray registry
- qDebug() << "Stop visual system tray:" << this->type();
- //LX11::closeSystemTray(TrayID);
- //TrayID = 0;
- disconnect(this); //remove any signals/slots
- isRunning = false;
- //Release all the tray applications and delete the containers
- if( !LSession::handle()->currentTrayApps(this->winId()).isEmpty() ){
- qDebug() << " - Remove tray applications";
- //This overall system tray is not closed down - go ahead and release them here
- for(int i=(trayIcons.length()-1); i>=0; i--){
- trayIcons[i]->detachApp();
- TrayIcon *cont = trayIcons.takeAt(i);
- LI->removeWidget(cont);
- cont->deleteLater();
- }
- }
- //Now let some other visual tray take over
- LSession::handle()->unregisterVisualTray(this->winId());
- qDebug() << "Done stopping visual tray";
-}
-
-// ========================
-// PRIVATE FUNCTIONS
-// ========================
-void LSysTray::checkAll(){
- if(!isRunning || stopping || checking){ pending = true; return; } //Don't check if not running at the moment
- checking = true;
- pending = false;
- //Make sure this tray should handle the windows (was not disabled in the backend)
- bool TrayRunning = LSession::handle()->registerVisualTray(this->winId());
- //qDebug() << "System Tray: Check tray apps";
- QList<WId> wins = LSession::handle()->currentTrayApps(this->winId());
- for(int i=0; i<trayIcons.length(); i++){
- int index = wins.indexOf(trayIcons[i]->appID());
- if(index < 0){
- //Tray Icon no longer exists: remove it
- qDebug() << " - Visual System Tray: Remove Icon:" << trayIcons[i]->appID();
- TrayIcon *cont = trayIcons.takeAt(i);
- cont->cleanup();
- LI->removeWidget(cont);
- cont->deleteLater();
- i--; //List size changed
- //Re-adjust the maximum widget size to account for what is left
- if(this->layout()->direction()==QBoxLayout::LeftToRight){
- this->setMaximumSize( trayIcons.length()*this->height(), 10000);
- }else{
- this->setMaximumSize(10000, trayIcons.length()*this->width());
- }
- }else{
- //Tray Icon already exists
- //qDebug() << " - SysTray: Update Icon";
- trayIcons[i]->update();
- wins.removeAt(index); //Already found - remove from the list
- }
- }
- //Now go through any remaining windows and add them
- for(int i=0; i<wins.length() && TrayRunning; i++){
- qDebug() << " - Visual System Tray: Add Icon:" << wins[i];
- TrayIcon *cont = new TrayIcon(this);
- connect(cont, SIGNAL(BadIcon()), this, SLOT(checkAll()) );
- //LSession::processEvents();
- trayIcons << cont;
- LI->addWidget(cont);
- //qDebug() << " - Update tray layout";
- if(this->layout()->direction()==QBoxLayout::LeftToRight){
- int sz = this->height()-2-2*frame->frameWidth();
- if(sz>64){ sz = 64; }
- cont->setSizeSquare(sz); //horizontal tray
- this->setMaximumSize( trayIcons.length()*this->height(), 10000);
- }else{
- int sz = this->width()-2-2*frame->frameWidth();
- if(sz>64){ sz = 64; }
- cont->setSizeSquare(sz); //vertical tray
- this->setMaximumSize(10000, trayIcons.length()*this->width());
- }
- //LSession::processEvents();
- //qDebug() << " - Attach tray app";
- cont->attachApp(wins[i]);
- if(cont->appID()==0){
- //could not attach window - remove the widget
- qDebug() << " - Invalid Tray App: Could Not Embed:";
- trayIcons.takeAt(trayIcons.length()-1); //Always at the end
- LI->removeWidget(cont);
- cont->deleteLater();
- continue;
- }
- LI->update(); //make sure there is no blank space in the layout
- }
- /*if(listChanged){
- //Icons got moved around: be sure to re-draw all of them to fix visuals
- for(int i=0; i<trayIcons.length(); i++){
- trayIcons[i]->update();
- }
- }*/
- //qDebug() << " - System Tray: check done";
- checking = false;
- if(pending){ QTimer::singleShot(0,this, SLOT(checkAll()) ); }
-}
-
-void LSysTray::UpdateTrayWindow(WId win){
- if(!isRunning || stopping || checking){ return; }
- for(int i=0; i<trayIcons.length(); i++){
- if(trayIcons[i]->appID()==win){
- //qDebug() << "System Tray: Update Window " << win;
- trayIcons[i]->repaint(); //don't use update() because we need an instant repaint (not a cached version)
- return; //finished now
- }
- }
- //Could not find tray in the list, run the checkall routine to make sure we are not missing any
- //qDebug() << "System Tray: Missing Window - check all";
- QTimer::singleShot(0,this, SLOT(checkAll()) );
-}
-
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemtray/LSysTray.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemtray/LSysTray.h
deleted file mode 100644
index 7db307c6..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemtray/LSysTray.h
+++ /dev/null
@@ -1,74 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2012-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_DESKTOP_SYSTRAY_H
-#define _LUMINA_DESKTOP_SYSTRAY_H
-
-//Qt includes
-#include <QFrame>
-#include <QHBoxLayout>
-#include <QDebug>
-#include <QX11Info>
-#include <QCoreApplication>
-
-//Local includes
-#include "../LPPlugin.h"
-#include "TrayIcon.h"
-
-//SYSTEM TRAY STANDARD DEFINITIONS
-#define SYSTEM_TRAY_REQUEST_DOCK 0
-#define SYSTEM_TRAY_BEGIN_MESSAGE 1
-#define SYSTEM_TRAY_CANCEL_MESSAGE 2
-
-class LSysTray : public LPPlugin{
- Q_OBJECT
-public:
- LSysTray(QWidget *parent = 0, QString id="systemtray", bool horizontal=true);
- ~LSysTray();
-
- virtual void AboutToClose(){
- this->stop();
- }
-
-private:
- bool isRunning, stopping, checking, pending;
- QList<TrayIcon*> trayIcons;
- QFrame *frame;
- QBoxLayout *LI; //layout items
- QTimer *upTimer; //manual timer to force refresh of all items
-
-private slots:
- void checkAll();
- void UpdateTrayWindow(WId win);
-
- //void removeTrayIcon(WId win);
-
-public slots:
- void start();
- void stop();
-
- virtual void OrientationChange(){
- //make sure the internal layout has the same orientation as the main widget
- LI->setDirection( this->layout()->direction() );
- //Re-adjust the maximum widget size
- int sz;
- if(this->layout()->direction()==QBoxLayout::LeftToRight){
- this->setMaximumSize( trayIcons.length()*this->height(), 10000);
- sz = this->height()-2*frame->frameWidth();
- }else{
- this->setMaximumSize(10000, trayIcons.length()*this->width());
- sz = this->width()-2*frame->frameWidth();
- }
- if(sz>64){ sz = 64; } //many tray icons can't go larger than this anyway
- for(int i=0; i<trayIcons.length(); i++){
- trayIcons[i]->setSizeSquare(sz);
- trayIcons[i]->repaint();
- }
- }
-
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemtray/TrayIcon.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemtray/TrayIcon.cpp
deleted file mode 100644
index 9fdbce50..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemtray/TrayIcon.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "TrayIcon.h"
-
-#include <LSession.h>
-#include <QScreen>
-#include <LuminaX11.h>
-
-TrayIcon::TrayIcon(QWidget *parent) : QWidget(parent){
- AID = 0; //nothing yet
- IID = 0;
- dmgID = 0;
- badpaints = 0;
- //this->setLayout(new QHBoxLayout);
- //this->layout()->setContentsMargins(0,0,0,0);
-}
-
-TrayIcon::~TrayIcon(){
-}
-
-void TrayIcon::cleanup(){
- AID = IID = 0;
-}
-
-WId TrayIcon::appID(){
- return AID;
-}
-
-void TrayIcon::attachApp(WId id){
- if(id==0){ return; } //nothing to attach
- else if(AID!=0){ qWarning() << "Tray Icon is already attached to a window!"; return; }
- AID = id;
- //WIN = QWindow::fromWinId(AID);
- //connect(WIN, SIGNAL(
- //this->layout()->addWidget( QWidget::createWindowContainer(WIN, this) );
- IID = this->winId(); //embed directly into this widget
- dmgID = LSession::handle()->XCB->EmbedWindow(AID, IID);
- if( dmgID != 0 ){
- LSession::handle()->XCB->RestoreWindow(AID); //make it visible
- //qDebug() << "New System Tray App:" << AID;
- QTimer::singleShot(1000, this, SLOT(updateIcon()) );
- }else{
- //qWarning() << "Could not Embed Tray Application:" << AID;
- IID = 0;
- AID = 0;
- }
-}
-
-void TrayIcon::setSizeSquare(int side){
- //qDebug() << " Set Fixed Systray size:" << side;
- this->setFixedSize( QSize(side, side) );
-}
-
-// ==============
-// PUBLIC SLOTS
-// ==============
-void TrayIcon::detachApp(){
- if(AID==0){ return; } //already detached
- //qDebug() << "Detach App:" << AID;
- //Temporarily move the AID, so that internal slots do not auto-run
- WId tmp = AID;
- AID = 0;
- //Now detach the application window and clean up
- //qDebug() << " - Unembed";
- //WIN->setParent(0); //Reset parentage back to the main stack
- LSession::handle()->XCB->UnembedWindow(tmp);
- //qDebug() << " - finished app:" << tmp;
- IID = 0;
-}
-
-// ==============
-// PRIVATE SLOTS
-// ==============
-void TrayIcon::updateIcon(){
- if(AID==0){ return; }
- //Make sure the icon is square
- QSize icosize = this->size();
- LSession::handle()->XCB->ResizeWindow(AID, icosize.width(), icosize.height());
- QTimer::singleShot(500, this, SLOT(update()) ); //make sure to re-draw the window in a moment
-}
-
-// =============
-// PROTECTED
-// =============
-void TrayIcon::paintEvent(QPaintEvent *event){
- QWidget::paintEvent(event); //make sure the background is already painted
- if(AID!=0){
- //Update the background on the tray app
- //qDebug() << "Paint Tray Background";
- //LSession::handle()->XCB->SetWindowBackground(this, this->geometry(), AID);
- //qDebug() << "Paint Tray:" << AID;
- QPainter painter(this);
- //Now paint the tray app on top of the background
- //qDebug() << " - Draw tray:" << AID << IID << this->winId();
- //qDebug() << " - - " << event->rect().x() << event->rect().y() << event->rect().width() << event->rect().height();
- //qDebug() << " - Get image:" << AID;
- QPixmap pix = LSession::handle()->XCB->TrayImage(AID); //= WIN->icon().pixmap(this->size());
-
- //qDebug() << " - Pix size:" << pix.size().width() << pix.size().height();
- //qDebug() << " - Geom:" << this->geometry().x() << this->geometry().y() << this->geometry().width() << this->geometry().height();
- if(!pix.isNull()){
- if(this->size() != pix.size()){ QTimer::singleShot(10, this, SLOT(updateIcon())); }
- painter.drawPixmap(0,0,this->width(), this->height(), pix.scaled(this->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation) );
- badpaints = 0; //good paint
- }else{
- badpaints++;
- if(badpaints>5){
- qWarning() << " - - No Tray Icon/Image found!" << "ID:" << AID;
- AID = 0; //reset back to nothing
- IID = 0;
- emit BadIcon(); //removed/destroyed in some non-valid way?
- }
- }
- //qDebug() << " - Done";
- }
-}
-
-void TrayIcon::resizeEvent(QResizeEvent *event){
- //qDebug() << "Resize Event:" << event->size().width() << event->size().height();
- if(AID!=0){
- LSession::handle()->XCB->ResizeWindow(AID, event->size());
- QTimer::singleShot(500, this, SLOT(update()) ); //make sure to re-draw the window in a moment
- }
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemtray/TrayIcon.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemtray/TrayIcon.h
deleted file mode 100644
index 5d072cc1..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemtray/TrayIcon.h
+++ /dev/null
@@ -1,55 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// Note: The basic idea behind this class that that it puts the app window
-// in the same spot as the tray icon (to directly pass mouse events and such),
-// while keeping the tray icon visual in sync with the app window
-//===========================================
-#ifndef _LUMINA_PANEL_PLUGIN_SYSTEM_TRAY_ICON_H
-#define _LUMINA_PANEL_PLUGIN_SYSTEM_TRAY_ICON_H
-
-//Qt includes
-#include <QWidget>
-#include <QTimer>
-#include <QPaintEvent>
-#include <QMoveEvent>
-#include <QResizeEvent>
-#include <QPainter>
-#include <QPixmap>
-#include <QImage>
-//#include <QWindow>
-// libLumina includes
-//#include <LuminaX11.h>
-
-class TrayIcon : public QWidget{
- Q_OBJECT
-public:
- TrayIcon(QWidget* parent = 0);
- ~TrayIcon();
-
- void cleanup(); //about to be removed after window was detroyed
-
- WId appID(); //the ID for the attached application
- void attachApp(WId id);
- void setSizeSquare(int side);
-
-public slots:
- void detachApp();
- void updateIcon();
-
-private:
- WId IID, AID; //icon ID and app ID
- int badpaints;
- uint dmgID;
-
-protected:
- void paintEvent(QPaintEvent *event);
- void resizeEvent(QResizeEvent *event);
-
-signals:
- void BadIcon();
-};
-#endif \ No newline at end of file
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/taskmanager/LTaskButton.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/taskmanager/LTaskButton.cpp
deleted file mode 100644
index 0dd68bb0..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/taskmanager/LTaskButton.cpp
+++ /dev/null
@@ -1,271 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LTaskButton.h"
-#include "LSession.h"
-
-#ifndef DEBUG
-#define DEBUG 0
-#endif
-
-LTaskButton::LTaskButton(QWidget *parent, bool smallDisplay) : LTBWidget(parent){
- actMenu = new QMenu(this);
- winMenu = new QMenu(this);
- UpdateMenus();
- showText = !smallDisplay;
- this->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
- this->setAutoRaise(false); //make sure these always look like buttons
- this->setContextMenuPolicy(Qt::CustomContextMenu);
- this->setFocusPolicy(Qt::NoFocus);
- this->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
- winMenu->setContextMenuPolicy(Qt::CustomContextMenu);
- connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(openActionMenu()) );
- connect(this, SIGNAL(clicked()), this, SLOT(buttonClicked()) );
- connect(winMenu, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(openActionMenu()) );
- connect(winMenu, SIGNAL(triggered(QAction*)), this, SLOT(winClicked(QAction*)) );
- connect(winMenu, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed()));
- connect(actMenu, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed()));
-}
-
-LTaskButton::~LTaskButton(){
-
-}
-
-//===========
-// PUBLIC
-//===========
-QList<WId> LTaskButton::windows(){
- QList<WId> list;
- for(int i=0; i<WINLIST.length(); i++){
- list << WINLIST[i].windowID();
- }
- return list;
-}
-
-QString LTaskButton::classname(){
- return cname;
-}
-
-bool LTaskButton::isActive(){
- return cstate == LXCB::ACTIVE;
-}
-
-void LTaskButton::addWindow(WId win){
- WINLIST << LWinInfo(win);
- UpdateButton();
-}
-
-void LTaskButton::rmWindow(WId win){
- for(int i=0; i<WINLIST.length(); i++){
- if(WINLIST[i].windowID() == win){
- WINLIST.removeAt(i);
- break;
- }
- }
- UpdateButton();
-}
-
-//==========
-// PRIVATE
-//==========
-LWinInfo LTaskButton::currentWindow(){
- if(WINLIST.length() == 1 || cWin.windowID()==0){
- return WINLIST[0]; //only 1 window - this must be it
- }else{
- return cWin;
- }
-}
-
-//=============
-// PUBLIC SLOTS
-//=============
-void LTaskButton::UpdateButton(){
- if(winMenu->isVisible()){ return; } //skip this if the window menu is currently visible for now
- bool statusOnly = (WINLIST.length() == LWINLIST.length());
- LWINLIST = WINLIST;
-
- winMenu->clear();
- LXCB::WINDOWVISIBILITY showstate = LXCB::IGNORE;
- for(int i=0; i<WINLIST.length(); i++){
- if(WINLIST[i].windowID() == 0){
- WINLIST.removeAt(i);
- i--;
- continue;
- }
- if(i==0 && !statusOnly){
- //Update the button visuals from the first window
- this->setIcon(WINLIST[i].icon(noicon));
- cname = WINLIST[i].Class();
- if(cname.isEmpty()){
- //Special case (chrome/chromium does not register *any* information with X except window title)
- cname = WINLIST[i].text();
- if(cname.contains(" - ")){ cname = cname.section(" - ",-1); }
- }
- this->setToolTip(cname);
- }
- bool junk;
- QAction *tmp = winMenu->addAction( WINLIST[i].icon(junk), WINLIST[i].text() );
- tmp->setData(i); //save which number in the WINLIST this entry is for
- LXCB::WINDOWVISIBILITY stat = WINLIST[i].status(true); //update the saved state for the window
- if(stat<LXCB::ACTIVE && WINLIST[i].windowID() == LSession::handle()->activeWindow()){ stat = LXCB::ACTIVE; }
- if(stat > showstate){ showstate = stat; } //higher priority
- }
- //Now setup the button appropriately
- // - visibility
- if(showstate == LXCB::IGNORE || WINLIST.length() < 1){ this->setVisible(false); }
- else{ this->setVisible(true); }
- // - functionality
- if(WINLIST.length() == 1){
- //single window
- this->setPopupMode(QToolButton::DelayedPopup);
- this->setMenu(actMenu);
- if(showText){
- QString txt = WINLIST[0].text();
- if(txt.length()>30){ txt.truncate(27); txt.append("..."); }
- else if(txt.length()<30){ txt = txt.leftJustified(30, ' '); }
- this->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); this->setText(txt);
- }else if(noicon){ this->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); this->setText( cname ); }
- else{ this->setToolButtonStyle(Qt::ToolButtonIconOnly); this->setText(""); }
- this->setToolTip(WINLIST[0].text());
- }else if(WINLIST.length() > 1){
- //multiple windows
- this->setPopupMode(QToolButton::InstantPopup);
- this->setMenu(winMenu);
- this->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
- if(noicon || showText){ "("+QString::number(WINLIST.length())+") "+cname; }
- else{ this->setText("("+QString::number(WINLIST.length())+")"); }
- }
- this->setState(showstate); //Make sure this is after the button setup so that it properly sets the margins/etc
- cstate = showstate; //save this for later
-}
-
-void LTaskButton::UpdateMenus(){
- //Action menu should be auto-created for the state of the current window (cWin/cstate)
- actMenu->clear();
- if(cstate!=LXCB::ACTIVE){
- actMenu->addAction( LXDG::findIcon("edit-select",""), tr("Activate Window"), this, SLOT(triggerWindow()) );
- }
- if(cstate!=LXCB::INVISIBLE){
- actMenu->addAction( LXDG::findIcon("view-close",""), tr("Minimize Window"), this, SLOT(minimizeWindow()) );
- if(LSession::handle()->XCB->WindowIsMaximized(cWin.windowID()) ){
- actMenu->addAction( LXDG::findIcon("view-restore",""), tr("Restore Window"), this, SLOT(maximizeWindow()) );
- }else{
- actMenu->addAction( LXDG::findIcon("view-fullscreen",""), tr("Maximize Window"), this, SLOT(maximizeWindow()) );
- }
- }
- actMenu->addAction( LXDG::findIcon("window-close",""), tr("Close Window"), this, SLOT(closeWindow()) );
- if(WINLIST.length()>1 && !winMenu->isVisible()){
- actMenu->addSeparator();
- actMenu->addAction( LXDG::findIcon("layer-visible-on",""), tr("Show All Windows"), this, SLOT(showAllWindows()) );
- actMenu->addAction( LXDG::findIcon("layer-visible-off",""), tr("Minimize All Windows"), this, SLOT(hideAllWindows()) );
- actMenu->addAction( LXDG::findIcon("window-close",""), tr("Close All Windows"), this, SLOT(closeAllWindows()) );
- }
-}
-
-//=============
-// PRIVATE SLOTS
-//=============
-void LTaskButton::buttonClicked(){
- if(WINLIST.length() > 1){
- winMenu->popup(QCursor::pos());
- }else{
- triggerWindow();
- }
-}
-
-void LTaskButton::closeWindow(){
- if(DEBUG){ qDebug() << "Close Window:" << this->text(); }
- if(winMenu->isVisible()){ winMenu->hide(); }
- LWinInfo win = currentWindow();
- LSession::handle()->XCB->CloseWindow(win.windowID());
- cWin = LWinInfo(); //clear the current
-}
-
-void LTaskButton::maximizeWindow(){
- if(DEBUG){ qDebug() << "Maximize Window:" << this->text(); }
- if(winMenu->isVisible()){ winMenu->hide(); }
- LWinInfo win = currentWindow();
- LSession::handle()->XCB->MaximizeWindow(win.windowID());
- //LSession::handle()->adjustWindowGeom(win.windowID(), true); //run this for now until the WM works properly
- cWin = LWinInfo(); //clear the current
-}
-
-void LTaskButton::minimizeWindow(){
- if(DEBUG){ qDebug() << "Minimize Window:" << this->text(); }
- if(winMenu->isVisible()){ winMenu->hide(); }
- LWinInfo win = currentWindow();
- LSession::handle()->XCB->MinimizeWindow(win.windowID());
- cWin = LWinInfo(); //clear the current
- QTimer::singleShot(100, this, SLOT(UpdateButton()) ); //make sure to update this button if losing active status
-}
-
-void LTaskButton::showAllWindows(){
- for(int i=WINLIST.length()-1; i>=0; i--){
- if(WINLIST[i].status()==LXCB::INVISIBLE){
- LSession::handle()->XCB->RestoreWindow(WINLIST[i].windowID());
- }
- }
-}
-
-void LTaskButton::hideAllWindows(){
- for(int i=WINLIST.length()-1; i>=0; i--){
- LXCB::WINDOWVISIBILITY state = WINLIST[i].status();
- if(state==LXCB::VISIBLE || state==LXCB::ACTIVE){
- LSession::handle()->XCB->MinimizeWindow(WINLIST[i].windowID());
- }
- }
-}
-
-void LTaskButton::closeAllWindows(){
- for(int i=WINLIST.length()-1; i>=0; i--){
- LSession::handle()->XCB->CloseWindow(WINLIST[i].windowID());
- }
-}
-
-void LTaskButton::triggerWindow(){
- LWinInfo win = currentWindow();
- //Check which state the window is currently in and flip it to the other
- //LXCB::WINDOWSTATE state = cstate;
- //if(DEBUG){ qDebug() << "Window State: " << state; }
- if(cstate == LXCB::ACTIVE){
- if(DEBUG){ qDebug() << "Minimize Window:" << this->text(); }
- LSession::handle()->XCB->MinimizeWindow(win.windowID());
- QTimer::singleShot(100, this, SLOT(UpdateButton()) ); //make sure to update this button if losing active status
- }else{
- if(DEBUG){ qDebug() << "Activate Window:" << this->text(); }
- LSession::handle()->XCB->ActivateWindow(win.windowID());
- }
- cWin = LWinInfo(); //clear the current
-}
-
-void LTaskButton::winClicked(QAction* act){
- //Get the window from the action
- if(act->data().toInt() < WINLIST.length()){
- cWin = WINLIST[act->data().toInt()];
- cstate = cWin.status();
- }else{ cWin = LWinInfo(); } //clear it
- //Now trigger the window
- triggerWindow();
-}
-
-void LTaskButton::openActionMenu(){
- //Get the Window the mouse is currently over
- QPoint curpos = QCursor::pos();
- QAction *act = winMenu->actionAt(winMenu->mapFromGlobal(curpos));
- //qDebug() << "Button Context Menu:" << curpos.x() << curpos.y() << winMenu->geometry().x() << winMenu->geometry().y() << winMenu->geometry().width() << winMenu->geometry().height();
- cWin = WINLIST[0]; //default to the first window
- if( act != 0 && winMenu->isVisible() ){
- //Get the window from the action
- //qDebug() << "Found Action:" << act->data().toInt();
- if(act->data().toInt() < WINLIST.length()){
- cWin = WINLIST[act->data().toInt()];
- }
- }
- cstate = cWin.status();
- //Now show the action menu
- UpdateMenus();
- actMenu->popup(QCursor::pos());
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/taskmanager/LTaskButton.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/taskmanager/LTaskButton.h
deleted file mode 100644
index 6b171c6a..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/taskmanager/LTaskButton.h
+++ /dev/null
@@ -1,73 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_DESKTOP_TASK_BUTTON_H
-#define _LUMINA_DESKTOP_TASK_BUTTON_H
-
-// Qt includes
-#include <QWidget>
-#include <QList>
-#include <QIcon>
-#include <QCursor>
-#include <QMenu>
-#include <QEvent>
-#include <QAction>
-
-// libLumina includes
-#include <LuminaXDG.h>
-#include <LuminaX11.h>
-
-// Local includes
-#include "../../LWinInfo.h"
-#include "../LTBWidget.h"
-
-class LTaskButton : public LTBWidget{
- Q_OBJECT
-public:
- LTaskButton(QWidget *parent=0, bool smallDisplay = true);
- ~LTaskButton();
-
- //Window Information
- QList<WId> windows();
- QString classname();
- bool isActive();
-
- //Window Management
- void addWindow(WId win); //Add a window to this button
- void rmWindow(WId win); //Remove a window from this button
-
-private:
- QList<LWinInfo> WINLIST;
- QList<LWinInfo> LWINLIST;
- QMenu *actMenu; // action menu (custom context menu)
- QMenu *winMenu; // window menu (if more than 1)
- LWinInfo cWin;
- QString cname; //class name for the entire button
- bool noicon, showText;
-
- LWinInfo currentWindow(); //For getting the currently-active window
- LXCB::WINDOWVISIBILITY cstate; //current state of the button
-
-public slots:
- void UpdateButton(); //re-sync the current window infomation
- void UpdateMenus(); //re-create the menus (text + icons)
-
-private slots:
- void buttonClicked();
- void closeWindow(); //send the signal to close a window
- void maximizeWindow(); //send the signal to maximize/restore a window
- void minimizeWindow(); //send the signal to minimize a window (iconify)
- void showAllWindows();
- void hideAllWindows();
- void closeAllWindows();
- void triggerWindow(); //change b/w visible and invisible
- void winClicked(QAction*);
- void openActionMenu();
-
-signals:
- void MenuClosed();
-};
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/taskmanager/LTaskManagerPlugin.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/taskmanager/LTaskManagerPlugin.cpp
deleted file mode 100644
index 79c5dd36..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/taskmanager/LTaskManagerPlugin.cpp
+++ /dev/null
@@ -1,141 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LTaskManagerPlugin.h"
-#include "../../LSession.h"
-
-LTaskManagerPlugin::LTaskManagerPlugin(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){
- timer = new QTimer(this);
- timer->setSingleShot(true);
- timer->setInterval(10); // 1/100 second
- connect(timer, SIGNAL(timeout()), this, SLOT(UpdateButtons()) );
- usegroups = true; //backwards-compatible default value
- if(id.contains("-nogroups")){ usegroups = false; }
- connect(LSession::handle(), SIGNAL(WindowListEvent()), this, SLOT(checkWindows()) );
- connect(LSession::handle(), SIGNAL(WindowListEvent(WId)), this, SLOT(UpdateButton(WId)) );
- this->layout()->setContentsMargins(0,0,0,0);
- QTimer::singleShot(0,this, SLOT(UpdateButtons()) ); //perform an initial sync
- //QTimer::singleShot(100,this, SLOT(OrientationChange()) ); //perform an initial sync
-}
-
-LTaskManagerPlugin::~LTaskManagerPlugin(){
-
-}
-
-//==============
-// PRIVATE SLOTS
-//==============
-void LTaskManagerPlugin::UpdateButtons(){
- updating = QDateTime::currentDateTime(); //global time stamp
- QDateTime ctime = updating; //current thread time stamp
-
- //Get the current window list
- QList<WId> winlist = LSession::handle()->XCB->WindowList();
- // Ignore the windows which don't want to be listed
- for (int i = 0; i < winlist.length(); i++) {
- QList<LXCB::WINDOWSTATE> states = LSession::handle()->XCB->WM_Get_Window_States(winlist[i]);
- for (int j = 0; j < states.length(); j++) {
- if (states[j] == LXCB::S_SKIP_TASKBAR) {
- // Skip taskbar window
- winlist.removeAt(i);
- i--;
- break;
- }
- }
- }
- //Do not change the status of the previously active window if it just changed to a non-visible window
- //WId activeWin = LSession::handle()->XCB->ActiveWindow();
- //bool skipActive = !winlist.contains(activeWin);
- //qDebug() << "Update Buttons:" << winlist;
- if(updating > ctime){ return; } //another thread kicked off already - stop this one
- //Now go through all the current buttons first
- for(int i=0; i<BUTTONS.length(); i++){
- //Get the windows managed in this button
- QList<WId> WI = BUTTONS[i]->windows();
- bool updated=false;
- if(updating > ctime){ return; } //another thread kicked off already - stop this one
- //Loop over all the windows for this button
- for(int w=0; w<WI.length(); w++){
- if(updating > ctime){ return; } //another thread kicked off already - stop this one
- if( winlist.contains( WI[w] ) ){
- //Still current window - update it later
- winlist.removeAll(WI[w] ); //remove this window from the list since it is done
- }else{
- //Window was closed - remove it
- if(WI.length()==1){
- //Remove the entire button
- //qDebug() << "Window Closed: Remove Button" ;
- this->layout()->takeAt(i); //remove from the layout
- BUTTONS.takeAt(i)->deleteLater();
- i--;
- updated = true; //prevent updating a removed button
- break; //break out of the button->window loop
- }else{
- //qDebug() << "Window Closed: Remove from button:" << WI[w].windowID() << "Button:" << w;
- BUTTONS[i]->rmWindow(WI[w]); // one of the multiple windows for the button
- WI.removeAt(w); //remove this window from the list
- w--;
- }
- updated=true; //button already changed
- }
- if(updating > ctime){ return; } //another thread kicked off already - stop this one
- }
- if(!updated){
- //qDebug() << "Update Button:" << i;
- if(updating > ctime){ return; } //another thread kicked off already - stop this one
- //if(!skipActive || !BUTTONS[i]->isActive()){
- QTimer::singleShot(1,BUTTONS[i], SLOT(UpdateButton()) ); //keep moving on
- //}
- }
- }
- //Now go through the remaining windows
- for(int i=0; i<winlist.length(); i++){
- //New windows, create buttons for each (add grouping later)
- if(updating > ctime){ return; } //another thread kicked off already - stop this one
- //Check for a button that this can just be added to
- QString ctxt = LSession::handle()->XCB->WindowClass(winlist[i]);
- bool found = false;
- for(int b=0; b<BUTTONS.length(); b++){
- if(updating > ctime){ return; } //another thread kicked off already - stop this one
- if(BUTTONS[b]->classname()== ctxt && usegroups){
- //This adds a window to an existing group
- found = true;
- //qDebug() << "Add Window to Button:" << b;
- BUTTONS[b]->addWindow(winlist[i]);
- break;
- }
- }
- if(!found){
- if(updating > ctime){ return; } //another thread kicked off already - stop this one
- //No group, create a new button
- //qDebug() << "New Button";
- LTaskButton *but = new LTaskButton(this, usegroups);
- but->addWindow( winlist[i] );
- if(this->layout()->direction()==QBoxLayout::LeftToRight){
- but->setIconSize(QSize(this->height(), this->height()));
- }else{
- but->setIconSize(QSize(this->width(), this->width()));
- }
- this->layout()->addWidget(but);
- connect(but, SIGNAL(MenuClosed()), this, SIGNAL(MenuClosed()));
- BUTTONS << but;
- }
- }
-}
-
-void LTaskManagerPlugin::UpdateButton(WId win){
- for(int i=0; i<BUTTONS.length(); i++){
- if(BUTTONS[i]->windows().contains(win)){
- qDebug() << "Update Task Manager Button (single window ping)";
- QTimer::singleShot(0,BUTTONS[i], SLOT(UpdateButton()) );
- break;
- }
- }
-}
-
-void LTaskManagerPlugin::checkWindows(){
- timer->start();
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/taskmanager/LTaskManagerPlugin.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/taskmanager/LTaskManagerPlugin.h
deleted file mode 100644
index e6371f34..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/taskmanager/LTaskManagerPlugin.h
+++ /dev/null
@@ -1,71 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_DESKTOP_TASK_MANAGER_PLUGIN_H
-#define _LUMINA_DESKTOP_TASK_MANAGER_PLUGIN_H
-
-// Qt includes
-#include <QWidget>
-#include <QList>
-#include <QString>
-#include <QDebug>
-#include <QTimer>
-#include <QEvent>
-#include <QDateTime>
-
-// libLumina includes
-#include <LuminaX11.h>
-
-// Local includes
-#include "LTaskButton.h"
-#include "LWinInfo.h"
-#include "../LPPlugin.h"
-
-class LTaskManagerPlugin : public LPPlugin{
- Q_OBJECT
-public:
- LTaskManagerPlugin(QWidget *parent=0, QString id="taskmanager", bool horizontal=true);
- ~LTaskManagerPlugin();
-
-private:
- QList<LTaskButton*> BUTTONS; //to keep track of the current buttons
- QTimer *timer;
- QDateTime updating; //quick flag for if it is currently working
- bool usegroups;
-
-private slots:
- void UpdateButtons();
- void UpdateButton(WId win);
- void checkWindows();
-
-public slots:
- void LocaleChange(){
- UpdateButtons();
- }
- void ThemeChange(){
- UpdateButtons();
- }
- void OrientationChange(){
- if(this->layout()->direction()==QBoxLayout::LeftToRight){ //horizontal
- this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
- this->layout()->setAlignment(Qt::AlignLeft);
- QSize sz(this->height(), this->height());
- for(int i=0; i<BUTTONS.length(); i++){
- BUTTONS[i]->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
- BUTTONS[i]->setIconSize(sz);
- }
- }else{ //vertical
- this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
- this->layout()->setAlignment(Qt::AlignTop);
- QSize sz(this->width(), this->width());
- for(int i=0; i<BUTTONS.length(); i++){
- BUTTONS[i]->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
- BUTTONS[i]->setIconSize(sz);
- }
- }
- }
-};
-#endif \ No newline at end of file
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/LUserButton.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/LUserButton.cpp
deleted file mode 100644
index acb27135..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/LUserButton.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LUserButton.h"
-#include "../../LSession.h"
-
-LUserButtonPlugin::LUserButtonPlugin(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){
- button = new QToolButton(this);
- button->setAutoRaise(true);
- button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
- button->setPopupMode(QToolButton::DelayedPopup); //make sure it runs the update routine first
- connect(button, SIGNAL(clicked()), this, SLOT(openMenu()));
- this->layout()->setContentsMargins(0,0,0,0);
- this->layout()->addWidget(button);
- menu = new QMenu(this);
- menu->setContentsMargins(1,1,1,1);
- connect(menu, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed()));
- usermenu = new UserWidget(this);
- connect(usermenu, SIGNAL(CloseMenu()), this, SLOT(closeMenu()) );
- mact = new QWidgetAction(this);
- mact->setDefaultWidget(usermenu);
- menu->addAction(mact);
-
- button->setMenu(menu);
- connect(menu, SIGNAL(aboutToHide()), this, SLOT(updateButtonVisuals()) );
- //Setup the global shortcut handling for opening the start menu
- connect(QApplication::instance(), SIGNAL(StartButtonActivated()), this, SLOT(shortcutActivated()) );
- LSession::handle()->registerStartButton(this->type());
-
- QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes
-}
-
-LUserButtonPlugin::~LUserButtonPlugin(){
-
-}
-
-void LUserButtonPlugin::updateButtonVisuals(){
- button->setToolTip(tr("Quickly launch applications or open files"));
- button->setText( SYSTEM::user() );
- if( QFile::exists(QDir::homePath()+"/.loginIcon.png") ){
- button->setIcon( QIcon(QDir::homePath()+"/.loginIcon.png") );
- }else{
- button->setIcon( LXDG::findIcon("user-identity", ":/images/default-user.png") ); //force icon refresh
- }
-}
-
-// ========================
-// PRIVATE FUNCTIONS
-// ========================
-void LUserButtonPlugin::openMenu(){
- usermenu->UpdateMenu();
- button->showMenu();
-}
-
-void LUserButtonPlugin::closeMenu(){
- menu->hide();
-}
-
-void LUserButtonPlugin::shortcutActivated(){
- if(LSession::handle()->registerStartButton(this->type())){
- if(menu->isVisible()){ closeMenu(); }
- else{ openMenu(); }
- }
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/LUserButton.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/LUserButton.h
deleted file mode 100644
index 8d5e5040..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/LUserButton.h
+++ /dev/null
@@ -1,75 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This panel plugin is the main button that allow the user to run
-// applications or logout of the desktop
-//===========================================
-#ifndef _LUMINA_DESKTOP_USER_MENU_PLUGIN_H
-#define _LUMINA_DESKTOP_USER_MENU_PLUGIN_H
-
-// Qt includes
-#include <QMenu>
-#include <QWidgetAction>
-#include <QToolButton>
-#include <QString>
-#include <QWidget>
-
-
-// Lumina-desktop includes
-//#include "../../Globals.h"
-#include "../LPPlugin.h" //main plugin widget
-
-// libLumina includes
-#include "LuminaXDG.h"
-
-#include "UserWidget.h"
-
-// PANEL PLUGIN BUTTON
-class LUserButtonPlugin : public LPPlugin{
- Q_OBJECT
-
-public:
- LUserButtonPlugin(QWidget *parent = 0, QString id = "userbutton", bool horizontal=true);
- ~LUserButtonPlugin();
-
-private:
- QMenu *menu;
- QWidgetAction *mact;
- UserWidget *usermenu;
- QToolButton *button;
-
-private slots:
- void openMenu();
- void closeMenu();
- void shortcutActivated();
-
- void updateButtonVisuals();
-
-public slots:
- void OrientationChange(){
- if(this->layout()->direction()==QBoxLayout::LeftToRight){
- this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
- button->setIconSize( QSize(this->height(), this->height()) );
- }else{
- this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
- button->setIconSize( QSize(this->width(), this->width()) );
- }
- this->layout()->update();
- updateButtonVisuals();
- }
-
- void LocaleChange(){
- updateButtonVisuals();
- usermenu->UpdateAll();
- }
-
- void ThemeChange(){
- updateButtonVisuals();
- usermenu->UpdateAll();
- }
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserItemWidget.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserItemWidget.cpp
deleted file mode 100644
index 8d7dab7a..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserItemWidget.cpp
+++ /dev/null
@@ -1,205 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "UserItemWidget.h"
-#include <LUtils.h>
-#include <LDesktopUtils.h>
-#include <QMenu>
-
-#define TEXTCUTOFF 165
-UserItemWidget::UserItemWidget(QWidget *parent, QString itemPath, QString type, bool goback) : QFrame(parent){
- createWidget();
- //Now fill it appropriately
- bool inHome = type.endsWith("-home"); //internal code
- if(inHome){ type = type.remove("-home"); }
- if(itemPath.endsWith(".desktop") || type=="app"){
- XDGDesktop item(itemPath);
- if( item.isValid() ){
- icon->setPixmap( LXDG::findIcon(item.icon, "preferences-system-windows-actions").pixmap(32,32) );
- name->setText( this->fontMetrics().elidedText(item.name, Qt::ElideRight, TEXTCUTOFF) );
- setupActions(&item);
- }else{
- gooditem = false;
- return;
- }
- }else if(type=="dir"){
- actButton->setVisible(false);
- if(itemPath.endsWith("/")){ itemPath.chop(1); }
- if(goback){
- icon->setPixmap( LXDG::findIcon("go-previous","").pixmap(32,32) );
- name->setText( tr("Go Back") );
- }else{
- icon->setPixmap( LXDG::findIcon("folder","").pixmap(32,32) );
- name->setText( this->fontMetrics().elidedText(itemPath.section("/",-1), Qt::ElideRight, TEXTCUTOFF) );
- }
- }else{
- actButton->setVisible(false);
- if(itemPath.endsWith("/")){ itemPath.chop(1); }
- if(QFileInfo(itemPath).isDir()){
- type = "dir";
- icon->setPixmap( LXDG::findIcon("folder","").pixmap(32,32) );
- }else if(LUtils::imageExtensions().contains(itemPath.section("/",-1).section(".",-1).toLower()) ){
- icon->setPixmap( QIcon(itemPath).pixmap(32,32) );
- }else{
- icon->setPixmap( LXDG::findMimeIcon(itemPath.section("/",-1)).pixmap(32,32) );
- }
- name->setText( this->fontMetrics().elidedText(itemPath.section("/",-1), Qt::ElideRight, TEXTCUTOFF) );
- }
- icon->setWhatsThis(itemPath);
- if(!goback){ this->setWhatsThis(name->text()); }
- isDirectory = (type=="dir"); //save this for later
- if(LDesktopUtils::isFavorite(itemPath)){
- linkPath = itemPath;
- isShortcut=true;
- }else if( inHome ){//|| itemPath.section("/",0,-2)==QDir::homePath()+"/Desktop" ){
- isShortcut = true;
- }else{
- isShortcut = false;
- }
- //Now setup the button appropriately
- setupButton(goback);
-}
-
-UserItemWidget::UserItemWidget(QWidget *parent, XDGDesktop *item) : QFrame(parent){
- if(item==0){ return; }
- createWidget();
- isDirectory = false;
- if(LDesktopUtils::isFavorite(item->filePath)){
- linkPath = item->filePath;
- isShortcut=true;
- }else if( item->filePath.section("/",0,-2)==QDir::homePath()+"/Desktop" ){
- isShortcut = true;
- }else{
- isShortcut = false;
- }
- //Now fill it appropriately
- icon->setPixmap( LXDG::findIcon(item->icon,"preferences-system-windows-actions").pixmap(32,32) );
- name->setText( this->fontMetrics().elidedText(item->name, Qt::ElideRight, TEXTCUTOFF) );
- this->setWhatsThis(name->text());
- icon->setWhatsThis(item->filePath);
- //Now setup the buttons appropriately
- setupButton();
- setupActions(item);
-}
-
-UserItemWidget::~UserItemWidget(){
- delete button;
- delete icon;
- delete name;
-}
-
-
-void UserItemWidget::createWidget(){
- //Initialize the widgets
- gooditem = true;
- menuopen = false;
- menureset = new QTimer(this);
- menureset->setSingleShot(true);
- menureset->setInterval(1000); //1 second
- this->setContentsMargins(0,0,0,0);
- button = new QToolButton(this);
- button->setIconSize( QSize(14,14) );
- button->setAutoRaise(true);
- actButton = new QToolButton(this);
- actButton->setPopupMode(QToolButton::InstantPopup);
- actButton->setFixedSize( QSize(17,34) );
- actButton->setArrowType(Qt::DownArrow);
- icon = new QLabel(this);
- icon->setFixedSize( QSize(34,34) );
- name = new QLabel(this);
- //Add them to the layout
- this->setLayout(new QHBoxLayout());
- this->layout()->setContentsMargins(1,1,1,1);
- this->layout()->addWidget(icon);
- this->layout()->addWidget(actButton);
- this->layout()->addWidget(name);
- this->layout()->addWidget(button);
- //Set a custom object name so this can be tied into the Lumina Theme stylesheets
- this->setObjectName("LuminaUserItemWidget");
- //Install the stylesheet
- //this->setStyleSheet("UserItemWidget{ background: transparent; border-radius: 5px;} UserItemWidget::hover{ background: rgba(255,255,255,200); border-radius: 5px; }");
-}
-
-void UserItemWidget::setupButton(bool disable){
- //if(isDirectory){ qDebug() << "Directory Entry:" << isShortcut << linkPath << icon->whatsThis(); }
-
- if(disable){
- button->setVisible(false);
- }else if(isShortcut && !linkPath.isEmpty()){ //Favorite Item - can always remove this
- button->setWhatsThis("remove");
- button->setIcon( LXDG::findIcon("list-remove","") );
- button->setToolTip(tr("Remove Shortcut"));
- connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked()) );
- }else if(isShortcut){ //Physical File/Dir - can remove
- button->setWhatsThis("remove");
- button->setIcon( LXDG::findIcon("user-trash","") );
- button->setToolTip(tr("Delete File"));
- connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked()) );
- }else if(!isShortcut){// if( !QFile::exists( QDir::homePath()+"/Desktop/"+icon->whatsThis().section("/",-1) ) && !LUtils::isFavorite(icon->whatsThis() ) ){
- //This file does not have a shortcut yet -- allow the user to add it
- button->setWhatsThis("add");
- button->setIcon( LXDG::findIcon("bookmark-toolbar","") );
- button->setToolTip(tr("Create Shortcut"));
- connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked()) );
- }else{
- //This already has a desktop shortcut -- no special actions
- button->setVisible(false);
- }
- if(isShortcut){
- name->setToolTip(icon->whatsThis()); //also allow the user to see the full shortcut path
- }
-}
-
-void UserItemWidget::setupActions(XDGDesktop *app){
- if(app==0 || app->actions.isEmpty()){ actButton->setVisible(false); return; }
- //Actions Available - go ahead and list them all
- actButton->setMenu( new QMenu(this) );
- for(int i=0; i<app->actions.length(); i++){
- QAction *act = new QAction(LXDG::findIcon(app->actions[i].icon, app->icon), app->actions[i].name, this);
- act->setToolTip(app->actions[i].ID);
- act->setWhatsThis(app->actions[i].ID);
- actButton->menu()->addAction(act);
- }
- connect(actButton->menu(), SIGNAL(triggered(QAction*)), this, SLOT(actionClicked(QAction*)) );
- connect(actButton->menu(), SIGNAL(aboutToShow()), this, SLOT(actionMenuOpen()) );
- connect(actButton->menu(), SIGNAL(aboutToHide()), this, SLOT(actionMenuClosed()) );
- connect(menureset, SIGNAL(timeout()), this, SLOT(resetmenuflag()) );
-}
-
-void UserItemWidget::buttonClicked(){
- button->setVisible(false);
- if(button->whatsThis()=="add"){
- LDesktopUtils::addFavorite(icon->whatsThis());
- //QFile::link(icon->whatsThis(), QDir::homePath()+"/.lumina/favorites/"+icon->whatsThis().section("/",-1) );
- emit NewShortcut();
- }else if(button->whatsThis()=="remove"){
- if(linkPath.isEmpty()){
- //This is a desktop file
- if(isDirectory){
- QProcess::startDetached("rm -r \""+icon->whatsThis()+"\"");
- }else{
- QFile::remove(icon->whatsThis());
- }
- //Don't emit the RemovedShortcut signal here - the automatic ~/Desktop watcher will see the change when finished
- }else{
- LDesktopUtils::removeFavorite(icon->whatsThis()); //This is a favorite
- emit RemovedShortcut();
- }
- }
-}
-
-void UserItemWidget::ItemClicked(){
- if(!linkPath.isEmpty()){ emit RunItem(linkPath); }
- else{ emit RunItem(icon->whatsThis()); }
-}
-
-void UserItemWidget::actionClicked(QAction *act){
- actButton->menu()->hide();
- QString cmd = "lumina-open -action \""+act->whatsThis()+"\" \"%1\"";
- if(!linkPath.isEmpty()){ cmd = cmd.arg(linkPath); }
- else{ cmd = cmd.arg(icon->whatsThis()); }
- emit RunItem(cmd);
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserItemWidget.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserItemWidget.h
deleted file mode 100644
index 0b212f10..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserItemWidget.h
+++ /dev/null
@@ -1,72 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This item widget manages a single file/directory
-//===========================================
-#ifndef _LUMINA_PANEL_USER_ITEM_WIDGET_H
-#define _LUMINA_PANEL_USER_ITEM_WIDGET_H
-
-#include <QFrame>
-#include <QLabel>
-#include <QToolButton>
-#include <QString>
-#include <QHBoxLayout>
-#include <QSize>
-#include <QDir>
-#include <QFile>
-#include <QMouseEvent>
-#include <QAction>
-#include <QMenu>
-#include <QTimer>
-
-#include <LuminaXDG.h>
-
-class UserItemWidget : public QFrame{
- Q_OBJECT
-public:
- UserItemWidget(QWidget *parent=0, QString itemPath="", QString type="unknown", bool goback=false);
- UserItemWidget(QWidget *parent=0, XDGDesktop *item= 0);
- ~UserItemWidget();
-
- bool gooditem;
-private:
- QToolButton *button, *actButton;
- QLabel *icon, *name;
- bool isDirectory, isShortcut, menuopen;
- QString linkPath;
- QTimer *menureset;
-
- void createWidget();
- void setupButton(bool disable = false);
- void setupActions(XDGDesktop*);
-
-private slots:
- void buttonClicked();
- void ItemClicked();
- void actionClicked(QAction*);
- //Functions to fix the submenu open/close issues
- void actionMenuOpen(){
- if(menureset->isActive()){ menureset->stop(); }
- menuopen = true;
- }
- void resetmenuflag(){ menuopen = false; } //tied to the "menureset" timer
- void actionMenuClosed(){ menureset->start(); }
-
-
-protected:
- void mouseReleaseEvent(QMouseEvent *event){
- if(menuopen){ resetmenuflag(); } //skip this event if a submenu was open
- else if(event->button() != Qt::NoButton){ ItemClicked(); }
- }
-
-signals:
- void NewShortcut();
- void RemovedShortcut();
- void RunItem(QString cmd);
-
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserWidget.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserWidget.cpp
deleted file mode 100644
index a0ba8996..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserWidget.cpp
+++ /dev/null
@@ -1,393 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "UserWidget.h"
-#include "ui_UserWidget.h"
-#include "../../LSession.h"
-#include "../../AppMenu.h"
-
-UserWidget::UserWidget(QWidget* parent) : QTabWidget(parent), ui(new Ui::UserWidget){
- ui->setupUi(this);
- updatingfavs = false;
- if(parent!=0){ parent->setMouseTracking(true); }
- this->setMouseTracking(true);
- sysapps = LSession::handle()->applicationMenu()->currentAppHash(); //get the raw info
-
- //Connect the signals/slots
- connect(ui->tool_desktopsettings, SIGNAL(clicked()), this, SLOT(openDeskSettings()) );
- connect(ui->tool_config_screensaver, SIGNAL(clicked()), this, SLOT(openScreenSaverConfig()) );
- connect(ui->tool_config_screensettings, SIGNAL(clicked()), this, SLOT(openScreenConfig()) );
- connect(ui->tool_fav_apps, SIGNAL(clicked()), this, SLOT(FavChanged()) );
- connect(ui->tool_fav_files, SIGNAL(clicked()), this, SLOT(FavChanged()) );
- connect(ui->tool_fav_dirs, SIGNAL(clicked()), this, SLOT(FavChanged()) );
- connect(ui->combo_app_cats, SIGNAL(currentIndexChanged(int)), this, SLOT(updateApps()) );
- connect(ui->tool_home_gohome, SIGNAL(clicked()), this, SLOT(slotGoHome()) );
- connect(ui->tool_home_browse, SIGNAL(clicked()), this, SLOT(slotOpenDir()) );
- connect(ui->tool_home_search, SIGNAL(clicked()), this, SLOT(slotOpenSearch()) );
- connect(ui->tool_config_about, SIGNAL(clicked()), this, SLOT(openLuminaInfo()) );
-
- //Setup the special buttons
- connect(ui->tool_app_store, SIGNAL(clicked()), this, SLOT(openStore()) );
- connect(ui->tool_controlpanel, SIGNAL(clicked()), this, SLOT(openControlPanel()) );
- //connect(ui->tool_qtconfig, SIGNAL(clicked()), this, SLOT(openQtConfig()) );
-
- lastUpdate = QDateTime(); //make sure it refreshes
-
- connect(LSession::handle()->applicationMenu(), SIGNAL(AppMenuUpdated()), this, SLOT(UpdateMenu()) );
- connect(QApplication::instance(), SIGNAL(DesktopFilesChanged()), this, SLOT(updateFavItems()) );
- QTimer::singleShot(10,this, SLOT(UpdateAll())); //make sure to load this once after initialization
-}
-
-UserWidget::~UserWidget(){
-}
-
-//===========
-// PRIVATE
-//===========
-void UserWidget::ClearScrollArea(QScrollArea *area){
- QWidget *wgt = area->takeWidget();
- wgt->deleteLater(); //delete the widget and all children
- area->setWidget( new QWidget() ); //create a new widget in the scroll area
- area->widget()->setContentsMargins(0,0,0,0);
- QVBoxLayout *layout = new QVBoxLayout;
- layout->setSpacing(2);
- layout->setContentsMargins(3,1,3,1);
- layout->setDirection(QBoxLayout::TopToBottom);
- layout->setAlignment(Qt::AlignTop);
- area->widget()->setLayout(layout);
-}
-
-void UserWidget::SortScrollArea(QScrollArea *area){
- //qDebug() << "Sorting Scroll Area:";
- //Sort all the items in the scroll area alphabetically
- QLayout *lay = area->widget()->layout();
- QStringList items;
- for(int i=0; i<lay->count(); i++){
- items << lay->itemAt(i)->widget()->whatsThis().toLower();
- }
-
- items.sort();
- //qDebug() << " - Sorted Items:" << items;
- for(int i=0; i<items.length(); i++){
- if(items[i].isEmpty()){ continue; }
- //QLayouts are weird in that they can only add items to the end - need to re-insert almost every item
- for(int j=0; j<lay->count(); j++){
- //Find this item
- if(lay->itemAt(j)->widget()->whatsThis().toLower()==items[i]){
- //Found it - now move it if necessary
- //qDebug() << "Found Item:" << items[i] << i << j;
- lay->addItem( lay->takeAt(j) );
- break;
- }
- }
- }
-
-}
-
-QIcon UserWidget::rotateIcon(QIcon ico){
- //Rotate the given icon to appear vertical in the tab widget
- QPixmap pix = ico.pixmap(32,32);
- QTransform tran;
- tran.rotate(+90); //For tabs on the left/West
- pix = pix.transformed(tran);
- ico = QIcon(pix);
- return ico;
-}
-
-//============
-// PRIVATE SLOTS
-//============
-void UserWidget::UpdateAll(){
- ui->retranslateUi(this);
- //Setup the Icons
- // - favorites tab
- this->setTabIcon(0, rotateIcon(LXDG::findIcon("folder-favorites","")) );
- this->setTabText(0,"");
- // - apps tab
- this->setTabIcon(1, rotateIcon(LXDG::findIcon("system-run","")) );
- this->setTabText(1,"");
- // - home tab
- this->setTabIcon(2, rotateIcon(LXDG::findIcon("user-home","")) );
- this->setTabText(2,"");
- // - config tab
- this->setTabIcon(3, rotateIcon(LXDG::findIcon("preferences-system","")) );
- this->setTabText(3,"");
- ui->tool_fav_apps->setIcon( LXDG::findIcon("system-run","") );
- ui->tool_fav_dirs->setIcon( LXDG::findIcon("folder","") );
- ui->tool_fav_files->setIcon( LXDG::findIcon("document-multiple","") );
- ui->tool_desktopsettings->setIcon( LXDG::findIcon("preferences-desktop","") );
- ui->tool_config_screensaver->setIcon( LXDG::findIcon("preferences-desktop-screensaver","") );
- ui->tool_config_screensettings->setIcon( LXDG::findIcon("preferences-other","") );
- ui->tool_home_gohome->setIcon( LXDG::findIcon("go-home","") );
- ui->tool_home_browse->setIcon( LXDG::findIcon("document-open","") );
- ui->tool_home_search->setIcon( LXDG::findIcon("system-search","") );
- ui->tool_config_about->setIcon( LXDG::findIcon("lumina","") );
-
- //Setup the special buttons
- QString APPSTORE = LOS::AppStoreShortcut();
- if(QFile::exists(APPSTORE) && !APPSTORE.isEmpty()){
- //Now load the info
- XDGDesktop store(APPSTORE);
- bool ok = store.isValid();
- if(ok){
- ui->tool_app_store->setIcon( LXDG::findIcon(store.icon, "") );
- ui->tool_app_store->setText( store.name );
- }
- ui->tool_app_store->setVisible(ok); //availability
- }else{
- ui->tool_app_store->setVisible(false); //not available
- }
- QString CONTROLPANEL = LOS::ControlPanelShortcut();
- if(QFile::exists(CONTROLPANEL) && !CONTROLPANEL.isEmpty()){
- //Now load the info
- XDGDesktop cpan(CONTROLPANEL);
- bool ok = cpan.isValid();
- if(ok){
- ui->tool_controlpanel->setIcon( LXDG::findIcon(cpan.icon, "") );
- }
- ui->tool_controlpanel->setVisible(ok); //availability
- }else{
- ui->tool_controlpanel->setVisible(false); //not available
- }
- /*QString QTCONFIG = LOS::QtConfigShortcut();
- if(QFile::exists(QTCONFIG) && !QTCONFIG.isEmpty()){
- ui->tool_qtconfig->setVisible(true);
- ui->tool_qtconfig->setIcon( LXDG::findIcon("preferences-desktop-theme","") );
- }else{
- ui->tool_qtconfig->setVisible(false);
- }*/
- //Now update the menus
- UpdateMenu();
-}
-
-void UserWidget::UpdateMenu(bool forceall){
- this->setCurrentWidget(ui->tab_fav);
- ui->tool_fav_apps->setChecked(true);
- ui->tool_fav_dirs->setChecked(false);
- ui->tool_fav_files->setChecked(false);
- cfav = 0; //favorite apps
- FavChanged();
- QString cdir = ui->label_home_dir->whatsThis();
- if(cdir.isEmpty() || !QFile::exists(cdir)){
- //Directory deleted or nothing loaded yet
- ui->label_home_dir->setWhatsThis(QDir::homePath());
- QTimer::singleShot(0,this, SLOT(updateHome()) );
- }else if( lastUpdate < QFileInfo(cdir).lastModified() || forceall){
- //Directory contents changed - reload it
- QTimer::singleShot(0,this, SLOT(updateHome()) );
- }
- if(lastUpdate < LSession::handle()->applicationMenu()->lastHashUpdate || lastUpdate.isNull() || forceall){
- updateAppCategories();
- QTimer::singleShot(0,this, SLOT(updateApps()) );
- }
- lastUpdate = QDateTime::currentDateTime();
-}
-
-void UserWidget::LaunchItem(QString path, bool fix){
- if(!path.isEmpty()){
- qDebug() << "Launch Application:" << path;
- if( fix && !path.startsWith("lumina-open") ){ LSession::LaunchApplication("lumina-open \""+path+"\""); }
- else{ LSession::LaunchApplication(path); }
- emit CloseMenu(); //so the menu container will close
- }
-}
-
-void UserWidget::FavChanged(){
- //uncheck the current item for a moment
- int oldfav = cfav;
- if(cfav==0){ ui->tool_fav_apps->setChecked(false); }
- else if(cfav==1){ ui->tool_fav_dirs->setChecked(false); }
- if(cfav==2){ ui->tool_fav_files->setChecked(false); }
- //Now check what other item is now the only one checked
- if(ui->tool_fav_apps->isChecked() && !ui->tool_fav_dirs->isChecked() && !ui->tool_fav_files->isChecked() ){
- cfav = 0;
- }else if(!ui->tool_fav_apps->isChecked() && ui->tool_fav_dirs->isChecked() && !ui->tool_fav_files->isChecked() ){
- cfav = 1;
- }else if(!ui->tool_fav_apps->isChecked() && !ui->tool_fav_dirs->isChecked() && ui->tool_fav_files->isChecked() ){
- cfav = 2;
- }else{
- //Re-check the old item (something invalid)
- ui->tool_fav_apps->setChecked(cfav==0);
- ui->tool_fav_dirs->setChecked(cfav==1);
- ui->tool_fav_files->setChecked(cfav==2);
- }
- updateFavItems(oldfav!=cfav);
-}
-
-void UserWidget::updateFavItems(bool newfilter){
- if(updatingfavs){ return; }
- updatingfavs = true;
- //qDebug() << "Updating User Favorite Items";
- QStringList newfavs = LDesktopUtils::listFavorites();
- //qDebug() << "Favorites:" << newfavs;
- if(lastHomeUpdate.isNull() || (QFileInfo(QDir::homePath()+"/Desktop").lastModified() > lastHomeUpdate) || newfavs!=favs ){
- favs = newfavs;
-
- homefiles = LSession::handle()->DesktopFiles();
- lastHomeUpdate = QDateTime::currentDateTime();
- }else if(!newfilter){ updatingfavs = false; return; } //nothing new to change - stop now
- //qDebug() << " - Passed Smoke Test...";
- QStringList favitems;
- //Remember for format for favorites: <name>::::[app/dir/<mimetype>]::::<full path>
- if(ui->tool_fav_apps->isChecked()){
- favitems = favs.filter("::::app::::");
- for(int i=0; i<homefiles.length(); i++){
- if(homefiles[i].fileName().endsWith(".desktop") && favitems.filter(homefiles[i].canonicalFilePath()).isEmpty() ){
- favitems << homefiles[i].fileName()+"::::app-home::::"+homefiles[i].absoluteFilePath();
- }
- }
- }else if(ui->tool_fav_dirs->isChecked()){
- favitems = favs.filter("::::dir::::");
- for(int i=0; i<homefiles.length(); i++){
- if(homefiles[i].isDir() && favitems.filter(homefiles[i].canonicalFilePath()).isEmpty() ){
- favitems << homefiles[i].fileName()+"::::dir-home::::"+homefiles[i].absoluteFilePath();
- }
- }
- }else{
- //Files
- for(int i=0; i<favs.length(); i++){
- QString type = favs[i].section("::::",1,1);
- if(type != "app" && type !="dir"){
- favitems << favs[i];
- }
- }
- for(int i=0; i<homefiles.length(); i++){
- if(!homefiles[i].isDir() && !homefiles[i].fileName().endsWith(".desktop") && favitems.filter(homefiles[i].canonicalFilePath()).isEmpty() ){
- favitems << homefiles[i].fileName()+"::::"+LXDG::findAppMimeForFile(homefiles[i].fileName())+"-home::::"+homefiles[i].absoluteFilePath();
- }
- }
- }
- ClearScrollArea(ui->scroll_fav);
- //qDebug() << " - Sorting Items";
- favitems.sort(); //sort them alphabetically
- //qDebug() << " - Creating Items:" << favitems;
- for(int i=0; i<favitems.length(); i++){
- if( !QFile::exists(favitems[i].section("::::",2,50)) ){ continue; } //file does not exist - just skip it
- UserItemWidget *it = new UserItemWidget(ui->scroll_fav->widget(), favitems[i].section("::::",2,50), favitems[i].section("::::",1,1) );
- if(!it->gooditem){ it->deleteLater(); continue; }
- ui->scroll_fav->widget()->layout()->addWidget(it);
- connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) );
- connect(it, SIGNAL(NewShortcut()), this, SLOT(updateFavItems()) );
- connect(it, SIGNAL(RemovedShortcut()), this, SLOT(updateFavItems()) );
- QApplication::processEvents(); //keep the UI snappy - might be a number of these
- }
- SortScrollArea(ui->scroll_fav);
- updatingfavs = false;
- //qDebug() << " - Done";
-}
-
-//Apps Tab
-void UserWidget::updateAppCategories(){
- ui->combo_app_cats->clear();
- QStringList cats = sysapps->keys();
- cats.sort();
- for(int i=0; i<cats.length(); i++){
- QString name, icon;
- if(cats[i] == "All"){ name = tr("All"); icon = "application-x-executable"; }
- else if(cats[i] == "Multimedia"){ name = tr("Multimedia"); icon = "applications-multimedia"; }
- else if(cats[i] == "Development"){ name = tr("Development"); icon = "applications-development"; }
- else if(cats[i] == "Education"){ name = tr("Education"); icon = "applications-education"; }
- else if(cats[i] == "Game"){ name = tr("Games"); icon = "applications-games"; }
- else if(cats[i] == "Graphics"){ name = tr("Graphics"); icon = "applications-graphics"; }
- else if(cats[i] == "Network"){ name = tr("Network"); icon = "applications-internet"; }
- else if(cats[i] == "Office"){ name = tr("Office"); icon = "applications-office"; }
- else if(cats[i] == "Science"){ name = tr("Science"); icon = "applications-science"; }
- else if(cats[i] == "Settings"){ name = tr("Settings"); icon = "preferences-system"; }
- else if(cats[i] == "System"){ name = tr("System"); icon = "applications-system"; }
- else if(cats[i] == "Utility"){ name = tr("Utilities"); icon = "applications-utilities"; }
- else if(cats[i] == "Wine"){ name = tr("Wine"); icon = "wine"; }
- else{ name = tr("Unsorted"); icon = "applications-other"; }
- ui->combo_app_cats->addItem( LXDG::findIcon(icon,""), name, cats[i] );
- }
-}
-
-void UserWidget::updateApps(){
- if(ui->combo_app_cats->currentIndex() < 0){ return; } //no cat
- QString cat = ui->combo_app_cats->itemData( ui->combo_app_cats->currentIndex() ).toString();
- QList<XDGDesktop*> items = sysapps->value(cat);
- ClearScrollArea(ui->scroll_apps);
- for(int i=0; i<items.length(); i++){
- UserItemWidget *it = new UserItemWidget(ui->scroll_apps->widget(), items[i]);
- ui->scroll_apps->widget()->layout()->addWidget(it);
- connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) );
- connect(it, SIGNAL(NewShortcut()), this, SLOT(updateFavItems()) );
- connect(it, SIGNAL(RemovedShortcut()), this, SLOT(updateFavItems()) );
- QApplication::processEvents(); //keep the UI snappy - might be a number of these
- }
-}
-
-//Home Tab
-void UserWidget::updateHome(){
- qDebug() << "Update Home";
- ClearScrollArea(ui->scroll_home);
- qDebug() << " - dir:" << ui->label_home_dir->whatsThis();
- QDir homedir(ui->label_home_dir->whatsThis());
- QStringList items;
- if(QDir::homePath() == homedir.absolutePath()){
- ui->label_home_dir->setText(tr("Home"));
- ui->tool_home_gohome->setVisible(false);
- }else{
- qDebug() << " - Show the back button";
- ui->tool_home_gohome->setVisible(true);
- ui->label_home_dir->setText( this->fontMetrics().elidedText(homedir.dirName(), Qt::ElideRight, ui->label_home_dir->width()));
- //Now make sure to put a "go back" button at the top of the list
- QString dir = ui->label_home_dir->whatsThis();
- if(dir.endsWith("/")){ dir.chop(1); }
- dir.chop( dir.section("/",-1).length() );
- items << dir;
- }
- qDebug() << " - Load items";
- ui->label_home_dir->setToolTip(ui->label_home_dir->whatsThis());
- items << homedir.entryList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot, QDir::Name | QDir::DirsFirst);
- QString type = "";
- if(homedir.absolutePath() == QDir::homePath()+"/Desktop"){ type.append("-home"); }//internal code
- for(int i=0; i<items.length(); i++){
- qDebug() << " - New item:" << homedir.absoluteFilePath(items[i]);
- UserItemWidget *it;
- if(items[i].startsWith("/")){ it = new UserItemWidget(ui->scroll_home->widget(), items[i], "dir", true); } //go-back button
- else{ it = new UserItemWidget(ui->scroll_home->widget(), homedir.absoluteFilePath(items[i]), type, false); }
- qDebug() << " - Add to layout";
- ui->scroll_home->widget()->layout()->addWidget(it);
- connect(it, SIGNAL(RunItem(QString)), this, SLOT(slotGoToDir(QString)) );
- connect(it, SIGNAL(NewShortcut()), this, SLOT(updateFavItems()) );
- connect(it, SIGNAL(RemovedShortcut()), this, SLOT(updateFavItems()) );
- qDebug() << " - process events";
- QApplication::processEvents(); //keep the UI snappy - may be a lot of these to load
- }
- qDebug() << " - Done";
-}
-
-void UserWidget::slotGoToDir(QString dir){
- if(!QFileInfo(dir).isDir()){
- LaunchItem(dir);
- }else{
- ui->label_home_dir->setWhatsThis(dir);
- updateHome();
- }
-}
-
-void UserWidget::slotGoHome(){
- slotGoToDir(QDir::homePath());
-}
-
-void UserWidget::slotOpenDir(){
- LaunchItem(ui->label_home_dir->whatsThis());
-}
-
-void UserWidget::slotOpenSearch(){
- LaunchItem("lumina-search -dir \""+ui->label_home_dir->whatsThis()+"\"", false); //use command as-is
-}
-
-void UserWidget::mouseMoveEvent( QMouseEvent *event){
- QTabBar *wid = tabBar();
- if(wid==0){ return; } //invalid widget found
- QPoint relpos = wid->mapFromGlobal( this->mapToGlobal(event->pos()) );
- //qDebug() << "Mouse Move Event: " << event->pos().x() << event->pos().y() << relpos.x() << relpos.y() << wid->width() << wid->height();
- if(wid && wid->tabAt(relpos) != -1){
- qDebug() << " - Mouse over tab";
- this->setCurrentIndex( wid->tabAt(relpos) );
- }
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserWidget.h b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserWidget.h
deleted file mode 100644
index 8b03c489..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserWidget.h
+++ /dev/null
@@ -1,101 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This panel plugin allows the user to quickly access user favorites and applications
-//===========================================
-#ifndef _LUMINA_PANEL_USER_BUTTON_WIDGET_H
-#define _LUMINA_PANEL_USER_BUTTON_WIDGET_H
-
-#include <QWidget>
-#include <QString>
-#include <QList>
-#include <QHash>
-#include <QVBoxLayout>
-#include <QScrollArea>
-#include <QDateTime>
-#include <QTransform>
-#include <QMouseEvent>
-#include <QTabWidget>
-
-#include <LuminaXDG.h>
-#include <LuminaOS.h>
-#include "UserItemWidget.h"
-
-#define SSAVER QString("xscreensaver-demo")
-
-namespace Ui{
- class UserWidget;
-};
-
-class UserWidget : public QTabWidget{
- Q_OBJECT
-public:
- UserWidget(QWidget *parent=0);
- ~UserWidget();
-
-public slots:
- void UpdateAll(); //for re-translation/icon changes
- void UpdateMenu(bool forceall = false); //for item changes
-
-private:
- Ui::UserWidget *ui;
- QHash<QString, QList<XDGDesktop*> > *sysapps;
- QDateTime lastUpdate, lastHomeUpdate;
- QStringList favs;
- QFileInfoList homefiles;
- int cfav; //current favorite category
- void ClearScrollArea(QScrollArea *area);
- void SortScrollArea(QScrollArea *area);
- QIcon rotateIcon(QIcon);
- bool updatingfavs;
-
-private slots:
- void LaunchItem(QString path, bool fix = true);
-
- //Favorites Tab
- void FavChanged(); //for ensuring radio-button-like behaviour
- void updateFavItems(bool newfilter = true); //if false, will only update if filesystem changes
-
- //Apps Tab
- void updateAppCategories();
- void updateApps();
-
- //Home Tab
- void updateHome();
- void slotGoToDir(QString dir);
- void slotGoHome();
- void slotOpenDir();
- void slotOpenSearch();
-
- //Slots for the special buttons
- void openStore(){
- LaunchItem(LOS::AppStoreShortcut());
- }
- void openControlPanel(){
- LaunchItem(LOS::ControlPanelShortcut());
- }
- void openDeskSettings(){
- LaunchItem("lumina-config", false);
- }
- void openScreenSaverConfig(){
- LaunchItem(SSAVER, false);
- }
- void openScreenConfig(){
- LaunchItem("lumina-xconfig",false);
- }
- void openLuminaInfo(){
- LaunchItem("lumina-info",false);
- }
-
-protected:
- void mouseMoveEvent( QMouseEvent *event);
-
-signals:
- void CloseMenu();
-
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserWidget.ui b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserWidget.ui
deleted file mode 100644
index 9ef5af7e..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/userbutton/UserWidget.ui
+++ /dev/null
@@ -1,593 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>UserWidget</class>
- <widget class="QTabWidget" name="UserWidget">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>294</width>
- <height>289</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>UserWidget</string>
- </property>
- <property name="tabPosition">
- <enum>QTabWidget::West</enum>
- </property>
- <property name="currentIndex">
- <number>0</number>
- </property>
- <widget class="QWidget" name="tab_fav">
- <attribute name="title">
- <string>Favorites</string>
- </attribute>
- <attribute name="toolTip">
- <string>Favorites</string>
- </attribute>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>1</number>
- </property>
- <property name="topMargin">
- <number>1</number>
- </property>
- <property name="rightMargin">
- <number>1</number>
- </property>
- <property name="bottomMargin">
- <number>1</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QToolButton" name="tool_fav_apps">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>30</width>
- <height>30</height>
- </size>
- </property>
- <property name="cursor">
- <cursorShape>ArrowCursor</cursorShape>
- </property>
- <property name="toolTip">
- <string>Favorite Applications</string>
- </property>
- <property name="text">
- <string>Applications</string>
- </property>
- <property name="iconSize">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_fav_dirs">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>30</width>
- <height>30</height>
- </size>
- </property>
- <property name="toolTip">
- <string>Favorite Directories</string>
- </property>
- <property name="text">
- <string>Places</string>
- </property>
- <property name="iconSize">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_fav_files">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>30</width>
- <height>30</height>
- </size>
- </property>
- <property name="toolTip">
- <string>Favorite FIles</string>
- </property>
- <property name="text">
- <string>Files</string>
- </property>
- <property name="iconSize">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QScrollArea" name="scroll_fav">
- <property name="widgetResizable">
- <bool>true</bool>
- </property>
- <widget class="QWidget" name="scrollAreaWidgetContents">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>259</width>
- <height>247</height>
- </rect>
- </property>
- </widget>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="tab_apps">
- <attribute name="title">
- <string>Apps</string>
- </attribute>
- <attribute name="toolTip">
- <string>Applications</string>
- </attribute>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>1</number>
- </property>
- <property name="topMargin">
- <number>1</number>
- </property>
- <property name="rightMargin">
- <number>1</number>
- </property>
- <property name="bottomMargin">
- <number>1</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="QComboBox" name="combo_app_cats">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>30</height>
- </size>
- </property>
- <property name="maxVisibleItems">
- <number>12</number>
- </property>
- <property name="iconSize">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QToolButton" name="tool_app_store">
- <property name="minimumSize">
- <size>
- <width>30</width>
- <height>30</height>
- </size>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="iconSize">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QScrollArea" name="scroll_apps">
- <property name="widgetResizable">
- <bool>true</bool>
- </property>
- <widget class="QWidget" name="scrollAreaWidgetContents_2">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>98</width>
- <height>28</height>
- </rect>
- </property>
- </widget>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="tab_home">
- <attribute name="title">
- <string>Home</string>
- </attribute>
- <attribute name="toolTip">
- <string>Home Directory</string>
- </attribute>
- <layout class="QVBoxLayout" name="verticalLayout_3">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>1</number>
- </property>
- <property name="topMargin">
- <number>1</number>
- </property>
- <property name="rightMargin">
- <number>1</number>
- </property>
- <property name="bottomMargin">
- <number>1</number>
- </property>
- <item>
- <layout class="QGridLayout" name="gridLayout">
- <property name="horizontalSpacing">
- <number>4</number>
- </property>
- <property name="verticalSpacing">
- <number>1</number>
- </property>
- <item row="0" column="3">
- <widget class="QToolButton" name="tool_home_search">
- <property name="toolTip">
- <string>Search this Directory</string>
- </property>
- <property name="text">
- <string notr="true"/>
- </property>
- <property name="iconSize">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="0" column="2">
- <widget class="QToolButton" name="tool_home_browse">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>30</width>
- <height>30</height>
- </size>
- </property>
- <property name="toolTip">
- <string>Open Directory</string>
- </property>
- <property name="text">
- <string notr="true">Browse</string>
- </property>
- <property name="iconSize">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonIconOnly</enum>
- </property>
- </widget>
- </item>
- <item row="0" column="0">
- <widget class="QToolButton" name="tool_home_gohome">
- <property name="minimumSize">
- <size>
- <width>30</width>
- <height>30</height>
- </size>
- </property>
- <property name="toolTip">
- <string>Go back to home directory</string>
- </property>
- <property name="text">
- <string notr="true">home</string>
- </property>
- <property name="iconSize">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="label_home_dir">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>30</height>
- </size>
- </property>
- <property name="font">
- <font>
- <pointsize>10</pointsize>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="frameShape">
- <enum>QFrame::NoFrame</enum>
- </property>
- <property name="text">
- <string notr="true">&lt;current dir&gt;</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- <property name="indent">
- <number>0</number>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QScrollArea" name="scroll_home">
- <property name="widgetResizable">
- <bool>true</bool>
- </property>
- <widget class="QWidget" name="scrollAreaWidgetContents_3">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>98</width>
- <height>28</height>
- </rect>
- </property>
- </widget>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="tab_config">
- <attribute name="title">
- <string>Config</string>
- </attribute>
- <attribute name="toolTip">
- <string>Desktop Preferences</string>
- </attribute>
- <layout class="QVBoxLayout" name="verticalLayout_4">
- <item>
- <widget class="QToolButton" name="tool_controlpanel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Control Panel</string>
- </property>
- <property name="iconSize">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_desktopsettings">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Desktop Appearance/Plugins</string>
- </property>
- <property name="iconSize">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_config_screensettings">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Screen Configuration</string>
- </property>
- <property name="iconSize">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_config_screensaver">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Screensaver Settings</string>
- </property>
- <property name="iconSize">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>243</width>
- <height>162</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="Line" name="line">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_config_about">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>About the Lumina Desktop</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.cpp b/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.cpp
index c3e9a1db..47f0e3d7 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.cpp
@@ -6,67 +6,105 @@
//===========================================
#include "ContextMenu.h"
#include <global-objects.h>
+#include <JsonMenu.h>
void DesktopContextMenu::SettingsChanged(DesktopSettings::File file){
- if(file == DesktopSettings::ContextMenu){ UpdateMenu(); }
+ if(file == DesktopSettings::ContextMenu){ UpdateMenu(false); }
}
-void DesktopContextMenu::UpdateMenu(){
+void DesktopContextMenu::UpdateMenu(bool fast){
//Put a label at the top
unsigned int num = Lumina::NWS->currentWorkspace();
workspaceLabel->setText( "<b>"+QString(tr("Workspace %1")).arg(QString::number(num+1))+"</b>");
+ if(fast && usewinmenu){ updateWinMenu(); }
+ if(fast){ return; } //already done
this->clear(); //clear it for refresh
this->addAction(wkspaceact);
this->addSeparator();
//Now load the user's menu setup and fill the menu
- QStringList items = DesktopSettings::instance()->value(DesktopSettings::ContextMenu, "itemlist", QStringList()<< "terminal" << "filemanager" << "line" << "settings" <<"lockdesktop").toStringList();
- //usewinmenu=false;
+ QStringList items = DesktopSettings::instance()->value(DesktopSettings::ContextMenu, "itemlist", QStringList()<< "terminal" << "filemanager" << "line" << "applications" << "windowlist" << "settings" << "lockdesktop").toStringList();
+ usewinmenu=false;
for(int i=0; i<items.length(); i++){
- if(items[i]=="terminal"){ this->addAction(LXDG::findIcon("utilities-terminal",""), tr("Terminal"))->setWhatsThis("lumina-open -terminal"); }
- else if(items[i]=="lockdesktop"){ this->addAction(LXDG::findIcon("system-lock-screen",""), tr("Lock Session"), this, SIGNAL(LockSession()) ); }
- else if(items[i]=="filemanager"){ this->addAction( LXDG::findIcon("user-home",""), tr("Browse Files"))->setWhatsThis("lumina-open \""+QDir::homePath()+"\""); }
- //else if(items[i]=="applications"){ this->addMenu( LSession::handle()->applicationMenu() ); }
+ if(items[i]=="terminal"){
+ QAction *act = this->addAction( tr("Terminal"));
+ LIconCache::instance()->loadIcon(act, "utilities-terminal");
+ act->setWhatsThis("--terminal");
+ }
+ else if(items[i]=="lockdesktop"){
+ QAction *act = this->addAction( tr("Lock Session"), this, SIGNAL(LockSession()) );
+ LIconCache::instance()->loadIcon(act, "system-lock-screen");
+ }
+ else if(items[i]=="filemanager"){
+ QAction *act = this->addAction( tr("Browse Files"));
+ LIconCache::instance()->loadIcon(act, "user-home");
+ act->setWhatsThis(QDir::homePath());
+ }
+ else if(items[i]=="applications"){
+ if(appMenu==0){ updateAppMenu(); }
+ this->addMenu( appMenu );
+ }
else if(items[i]=="line"){ this->addSeparator(); }
//else if(items[i]=="settings"){ this->addMenu( LSession::handle()->settingsMenu() ); }
- //else if(items[i]=="windowlist"){ this->addMenu( winMenu); usewinmenu=true;}
- else if(items[i].startsWith("app::::") && items[i].endsWith(".desktop")){
+ else if(items[i]=="windowlist"){
+ if(winMenu==0){ updateWinMenu(); }
+ this->addMenu( winMenu);
+ usewinmenu=true;
+ }else if(items[i].startsWith("app::::") && items[i].endsWith(".desktop")){
//Custom *.desktop application
QString file = items[i].section("::::",1,1).simplified();
- XDGDesktop xdgf(file);// = LXDG::loadDesktopFile(file, ok);
- if(xdgf.type!=XDGDesktop::BAD){
- this->addAction( LXDG::findIcon(xdgf.icon,""), xdgf.name)->setWhatsThis("lumina-open \""+file+"\"");
- }else{
- qDebug() << "Could not load application file:" << file;
- }
- }/*else if(items[i].startsWith("jsonmenu::::")){
+ //Try to use the pre-loaded app entry for this
+ XDGDesktop *xdg = XDGDesktopList::instance()->findAppFile(file);
+ if(xdg!=0){ xdg->addToMenu(this); }
+ else{
+ XDGDesktop xdgf(file);// = LXDG::loadDesktopFile(file, ok);
+ if(xdgf.type!=XDGDesktop::BAD){ xdgf.addToMenu(this); }
+ }
+ }else if(items[i].startsWith("jsonmenu::::")){
//Custom JSON menu system (populated on demand via external scripts/tools
QStringList info = items[i].split("::::"); //FORMAT:[ "jsonmenu",exec,name, icon(optional)]
if(info.length()>=3){
- qDebug() << "Custom JSON Menu Loaded:" << info;
- JsonMenu *tmp = new JsonMenu(info[1], deskMenu);
+ //qDebug() << "Custom JSON Menu Loaded:" << info;
+ JsonMenu *tmp = new JsonMenu(info[1], this);
tmp->setTitle(info[2]);
connect(tmp, SIGNAL(triggered(QAction*)), this, SLOT(SystemApplication(QAction*)) );
if(info.length()>=4){ tmp->setIcon( LXDG::findIcon(info[3],"") ); }
this->addMenu(tmp);
}
- }*/
+ }
}
//Now add the system quit options
this->addSeparator();
this->addAction(LXDG::findIcon("system-log-out",""), tr("Leave"), this, SIGNAL(showLeaveDialog()) );
}
+// === PRIVATE ===
+void DesktopContextMenu::AddWindowToMenu(NativeWindow *win){
+ QString label = win->property(NativeWindow::ShortTitle).toString();
+ if(label.isEmpty()){ label = win->property(NativeWindow::Title).toString(); }
+ if(label.isEmpty()){ label = win->property(NativeWindow::Name).toString(); }
+ QAction *tmp = winMenu->addAction( win->property(NativeWindow::Icon).value<QIcon>(), label, win, SLOT(toggleVisibility()) );
+ //Need to change the visual somehow to indicate whether it is visible or not
+ //bool visible = win->property(NativeWindow::Visible).toBool();
+ // TODO
+}
+
// === PUBLIC ===
DesktopContextMenu::DesktopContextMenu(QWidget *parent) : QMenu(parent){
if(parent!=0){
parent->setContextMenuPolicy(Qt::CustomContextMenu);
connect(parent, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showMenu(const QPoint&)) );
}
+ appMenu = 0;
+ winMenu = 0;
+ usewinmenu = false;
workspaceLabel = new QLabel(0);
+ workspaceLabel->setAlignment(Qt::AlignCenter);
wkspaceact = new QWidgetAction(0);
wkspaceact->setDefaultWidget(workspaceLabel);
connect(this, SIGNAL(triggered(QAction*)), this, SLOT(LaunchAction(QAction*)) );
-
+ //Connect to a couple global objects
+ connect(this, SIGNAL(aboutToShow()), this, SLOT(UpdateMenu()) ); //this will do a "fast" update
+ qDebug() << "Done Creating Context Menu";
}
DesktopContextMenu::~DesktopContextMenu(){
@@ -78,9 +116,9 @@ DesktopContextMenu::~DesktopContextMenu(){
void DesktopContextMenu::start(){
connect(DesktopSettings::instance(), SIGNAL(FileModified(DesktopSettings::File)), this, SLOT(SettingsChanged(DesktopSettings::File)) );
connect(this, SIGNAL(LockSession()), Lumina::SS, SLOT(LockScreenNow()) );
-
+ connect(XDGDesktopList::instance(), SIGNAL(appsUpdated()), this, SLOT(updateAppMenu()) );
+ UpdateMenu(false);
//Still need to connect to some "workspaceChanged(int)" signal
- QTimer::singleShot(0, this, SLOT(UpdateMenu()) ); //initial update
}
// === PRIVATE SLOTS ===
@@ -89,9 +127,63 @@ void DesktopContextMenu::LaunchAction(QAction *act){
if(act->whatsThis().isEmpty() || act->parent()!=this ){ return; }
qDebug() << "Launch Menu Action:" << act->whatsThis();
QString cmd = act->whatsThis();
- ExternalProcess::launch(cmd);
+ if(cmd.startsWith("-action ")){
+ LaunchApp(act); //forward this to the XDGDesktop parser
+ }else if(cmd.startsWith("--") || cmd.endsWith(".desktop")){
+ LSession::instance()->LaunchStandardApplication(cmd);
+ }else if(QFile::exists(cmd)){
+ QString mime = XDGMime::fromFileName(cmd);
+ LSession::instance()->LaunchStandardApplication(mime, QStringList() << cmd);
+ }
+}
+
+void DesktopContextMenu::LaunchApp(QAction *act){
+
+ // The "whatsThis() field is set by the XDGDesktop object/format
+ if(act->whatsThis().isEmpty()){ return; }
+ QString action, file;
+ QString wt = act->whatsThis();
+ if(wt.startsWith("-action")){
+ action = wt.section(" ",1,1); action=action.remove("\"");
+ file = wt.section(" ",2,-1); file=file.remove("\"");
+ }
+ else{ file = wt; }
+ LSession::instance()->LaunchDesktopApplication(file, action);
+
}
void DesktopContextMenu::showMenu(const QPoint &pt){
this->popup(pt);
}
+
+void DesktopContextMenu::updateAppMenu(){
+ //qDebug() << "Update App Menu";
+ if(appMenu==0){
+ appMenu = new QMenu(this);
+ appMenu->setTitle( tr("Applications"));
+ LIconCache::instance()->loadIcon( appMenu, "system-run");
+ connect(appMenu, SIGNAL(triggered(QAction*)), this, SLOT(LaunchApp(QAction*)) );
+ }
+ //qDebug() << "Populate App Menu";
+ XDGDesktopList::instance()->populateMenu(appMenu);
+}
+
+void DesktopContextMenu::updateWinMenu(){
+ //qDebug() << "Update Win Menu";
+ if(winMenu==0){
+ winMenu = new QMenu(this);
+ winMenu->setTitle( tr("Task Manager") );
+ LIconCache::instance()->loadIcon( winMenu, "preferences-system-windows");
+ }
+ winMenu->clear();
+ QList<NativeWindow*> wins = Lumina::NWS->currentWindows();
+ unsigned int wkspace = Lumina::NWS->currentWorkspace();
+ for(int i=0; i<wins.length(); i++){
+ //First check if this window is in the current workspace (or is "sticky")
+ if(wins.at(i)->property(NativeWindow::Workspace).toUInt() != wkspace
+ && wins.at(i)->property(NativeWindow::States).value< QList<NativeWindow::State> >().contains(NativeWindow::S_STICKY) ){
+ continue;
+ }
+ AddWindowToMenu(wins.at(i));
+ }
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.h b/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.h
index 7fd21967..78756e8c 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.h
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.h
@@ -13,11 +13,15 @@ class DesktopContextMenu : public QMenu{
Q_OBJECT
public slots:
void SettingsChanged(DesktopSettings::File);
- void UpdateMenu(); //re-create the menu
+ void UpdateMenu(bool fast = true); //re-create the menu
private:
QLabel *workspaceLabel;
QWidgetAction *wkspaceact;
+ QMenu *appMenu, *winMenu;
+ bool usewinmenu;
+
+ void AddWindowToMenu(NativeWindow*);
public:
DesktopContextMenu(QWidget *parent = 0);
@@ -27,8 +31,13 @@ public:
private slots:
void LaunchAction(QAction *act);
+ void LaunchApp(QAction *act);
+
void showMenu(const QPoint&);
+ void updateAppMenu();
+ void updateWinMenu();
+
signals:
void LockSession();
void showLeaveDialog();
diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp
index 39a7b596..a0edde9f 100644
--- a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp
@@ -8,7 +8,7 @@
#include <QScreen>
#include <QApplication>
-#define DEBUG 1
+#define DEBUG 0
LScreenSaver::LScreenSaver() : QWidget(0,Qt::BypassWindowManagerHint | Qt::WindowStaysOnTopHint){
starttimer = new QTimer(this);
@@ -20,7 +20,6 @@ LScreenSaver::LScreenSaver() : QWidget(0,Qt::BypassWindowManagerHint | Qt::Windo
LOCKER = new LLockScreen(this);
LOCKER->hide();
- settings = new QSettings("lumina-desktop","lumina-screensaver",this);
SSRunning = SSLocked = updating = false;
this->setObjectName("LSCREENSAVERBASE");
this->setStyleSheet("LScreenSaver#LSCREENSAVERBASE{ background: grey; }");
@@ -60,10 +59,9 @@ void LScreenSaver::start(){
}
void LScreenSaver::reloadSettings(){
- settings->sync();
- starttimer->setInterval( settings->value("timedelaymin",10).toInt() * 60000 );
- locktimer->setInterval( settings->value("lockdelaymin",1).toInt() * 60000 );
- hidetimer->setInterval( settings->value("hidesecs",15).toInt() * 1000 );
+ starttimer->setInterval( DesktopSettings::instance()->value(DesktopSettings::ScreenSaver, "timedelaymin",10).toInt() * 60000 );
+ locktimer->setInterval( DesktopSettings::instance()->value(DesktopSettings::ScreenSaver, "lockdelaymin",1).toInt() * 60000 );
+ hidetimer->setInterval( DesktopSettings::instance()->value(DesktopSettings::ScreenSaver, "hidesecs",15).toInt() * 1000 );
}
void LScreenSaver::newInputEvent(){
@@ -107,12 +105,14 @@ void LScreenSaver::ShowScreenSaver(){
for(int i=0; i<SCREENS.length(); i++){
bounds = bounds.united(SCREENS[i]->geometry());
if(DEBUG){ qDebug() << " - New SS Base:" << i; }
- BASES << new SSBaseWidget(this, settings);
+ BASES << new SSBaseWidget(this);
connect(BASES[i], SIGNAL(InputDetected()), this, SLOT(newInputEvent()) );
-
+
//Setup the geometry of the base to match the screen
BASES[i]->setGeometry(SCREENS[i]->geometry()); //match this screen geometry
- BASES[i]->setPlugin(settings->value("screenplugin"+QString::number(i+1), settings->value("defaultscreenplugin","random").toString() ).toString() );
+ QString plug = DesktopSettings::instance()->value(DesktopSettings::ScreenSaver, "plugin_"+SCREENS[i]->name(), "").toString();
+ if(plug.isEmpty()){ plug = DesktopSettings::instance()->value(DesktopSettings::ScreenSaver, "default_plugin","random").toString(); }
+ BASES[i]->setPlugin(plug);
}
//Now set the overall parent widget geometry and show everything
this->setGeometry(bounds); //overall background widget
@@ -151,7 +151,7 @@ void LScreenSaver::HideScreenSaver(){
emit ClosingScreenSaver();
emit LockStatusChanged(false);
}
- qDebug() << "Stop ScreenSavers";
+ if(DEBUG){ qDebug() << "Stop ScreenSavers"; }
for(int i=0; i<BASES.length(); i++){
BASES[i]->stopPainting();
BASES[i]->hide();
diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.h
index 18f12fab..2276fb6d 100644
--- a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.h
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.h
@@ -22,7 +22,6 @@ public:
private:
QTimer *starttimer, *locktimer, *hidetimer;
- QSettings *settings;
QList<SSBaseWidget*> BASES;
LLockScreen *LOCKER;
int cBright;
diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp
index 7854b597..a6d5be60 100644
--- a/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp
@@ -9,17 +9,18 @@
#define DEBUG 1
-static QStringList validPlugs;
// ========
// PUBLIC
// ========
-SSBaseWidget::SSBaseWidget(QWidget *parent, QSettings *set) : QWidget(parent){
- if(validPlugs.isEmpty()){ validPlugs << "none"; } //add more later
- settings = set; //needed to pass along for plugins to read any special options/settings
+SSBaseWidget::SSBaseWidget(QWidget *parent) : QWidget(parent){
this->setObjectName("LuminaBaseSSWidget");
ANIM = 0;
this->setMouseTracking(true);
plugType="none";
+ restartTimer = new QTimer(this);
+ restartTimer->setInterval( DesktopSettings::instance()->value(DesktopSettings::ScreenSaver, "globals/plugin_time_seconds", 60).toInt() * 1000);
+ restartTimer->setSingleShot(true);
+ connect(restartTimer, SIGNAL(timeout()), this, SLOT(startPainting()) );
}
SSBaseWidget::~SSBaseWidget(){
@@ -27,9 +28,7 @@ SSBaseWidget::~SSBaseWidget(){
}
void SSBaseWidget::setPlugin(QString plug){
- plug = plug.toLower();
- if(validPlugs.contains(plug) || plug=="random"){ plugType = plug; }
- else{ plugType = "none"; }
+ plugType = plug.toLower();
}
// =============
@@ -48,7 +47,7 @@ void SSBaseWidget::startPainting(){
if(valid.isEmpty()){ cplug = "none"; } //no known plugins
else{ cplug = valid[ qrand()%valid.length() ]; } //grab a random plugin
}
- if(DEBUG){ qDebug() << " - Screen Saver:" << cplug; }
+ if(DEBUG){ qDebug() << " - Screen Saver:" << plugType << cplug; }
//Now list all the various plugins and start them appropriately
QString style;
if(cplug=="none"){
@@ -60,7 +59,7 @@ void SSBaseWidget::startPainting(){
this->repaint();
//If not a stylesheet-based plugin - set it here
if(cplug!="none"){
- ANIM = BaseAnimGroup::NewAnimation(cplug, this, settings);
+ ANIM = BaseAnimGroup::NewAnimation(cplug, this);
connect(ANIM, SIGNAL(finished()), this, SLOT(startPainting()) ); //repeat the plugin as needed
ANIM->LoadAnimations();
}
@@ -71,14 +70,19 @@ void SSBaseWidget::startPainting(){
ANIM->start();
}
}
+ restartTimer->start();
}
void SSBaseWidget::stopPainting(){
if(ANIM!=0){
- qDebug() << "Stopping Animation!!";
+ if(DEBUG){ qDebug() << "Stopping Animation!!"; }
ANIM->stop();
//ANIM->clear();
ANIM->deleteLater();
ANIM = 0;
+ //Delete any child widgets of the canvas
+ QList<QWidget*> widgets = this->findChildren<QWidget*>("",Qt::FindDirectChildrenOnly);
+ for(int i=0; i<widgets.length(); i++){ widgets[i]->deleteLater(); }
}
+ if(restartTimer->isActive()){ restartTimer->stop(); }
}
diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.h
index 9d987178..af809127 100644
--- a/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.h
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.h
@@ -15,7 +15,7 @@
class SSBaseWidget : public QWidget{
Q_OBJECT
public:
- SSBaseWidget(QWidget *parent, QSettings *set);
+ SSBaseWidget(QWidget *parent);
~SSBaseWidget();
void setPlugin(QString);
@@ -27,7 +27,7 @@ public slots:
private:
QString plugType, cplug; //type of custom painting to do
BaseAnimGroup *ANIM;
- QSettings *settings;
+ QTimer *restartTimer;
private slots:
diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.cpp
index c8a248c0..9b095fe4 100644
--- a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.cpp
@@ -15,27 +15,37 @@
#include "ImageSlideshow.h"
#include "VideoSlideshow.h"
+
+QVariant BaseAnimGroup::readSetting(QString variable, QVariant defaultvalue){
+ return DesktopSettings::instance()->value(DesktopSettings::ScreenSaver,
+ "Animations/"+animPlugin+"/"+variable, defaultvalue);
+}
+
//==============================
// PLUGIN LOADING/LISTING
//==============================
-BaseAnimGroup* BaseAnimGroup::NewAnimation(QString type, QWidget *parent, QSettings *set){
+BaseAnimGroup* BaseAnimGroup::NewAnimation(QString type, QWidget *parent){
//This is where we place all the known plugin ID's, and load the associated subclass
+ BaseAnimGroup *anim = 0;
if(type=="fireflies"){
- return (new FirefliesAnimation(parent,set));
+ anim = new FirefliesAnimation(parent);
}else if(type == "grav") {
- return (new GravAnimation(parent, set));
+ anim = new GravAnimation(parent);
}else if(type == "text") {
- return (new TextAnimation(parent, set));
+ anim = new TextAnimation(parent);
}else if(type == "imageSlideshow") {
- return (new ImageAnimation(parent, set));
+ anim = new ImageAnimation(parent);
}else if(type == "videoSlideshow") {
- return (new VideoAnimation(parent, set));
+ anim = new VideoAnimation(parent);
}else {
//Unknown screensaver, return a blank animation group
- return (new BaseAnimGroup(parent, set));
+ anim = new BaseAnimGroup(parent);
}
+ //tag the animation with the type it is and return it
+ if(anim!=0){ anim->animPlugin = type; }
+ return anim;
}
QStringList BaseAnimGroup::KnownAnimations(){
- return (QStringList() << "imageSlideshow" /*<< "grav" << "text" << "imageSlideshow" << "fireflies"*/);
+ return (QStringList() << "none" << "grav" << "text" << "imageSlideshow" << "videoSlideshow" << "fireflies");
}
diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.h
index b1324e78..92e038ed 100644
--- a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.h
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.h
@@ -16,21 +16,23 @@ class BaseAnimGroup : public QParallelAnimationGroup{
Q_OBJECT
public:
QWidget *canvas;
- QSettings *settings;
+ QString animPlugin;
virtual void LoadAnimations(){} //This is the main function which needs to be subclassed
- BaseAnimGroup(QWidget *parent, QSettings *set){
+ BaseAnimGroup(QWidget *parent){
canvas = parent;
- settings = set;
canvas->setCursor( QCursor(Qt::BlankCursor) );
}
~BaseAnimGroup(){}
+ QVariant readSetting(QString variable, QVariant defaultvalue = QVariant());
+
+
//==============================
// PLUGIN LOADING/LISTING (Change in the .cpp file)
//==============================
- static BaseAnimGroup* NewAnimation(QString type, QWidget *parent, QSettings *set);
+ static BaseAnimGroup* NewAnimation(QString type, QWidget *parent);
static QStringList KnownAnimations();
};
diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Fireflies.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Fireflies.h
index 75dfb1ae..dfc12e79 100644
--- a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Fireflies.h
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Fireflies.h
@@ -12,6 +12,7 @@
#include "global-includes.h"
#include "BaseAnimGroup.h"
#include <QSequentialAnimationGroup>
+#include <QGraphicsOpacityEffect>
class Firefly : public QSequentialAnimationGroup{
Q_OBJECT
@@ -34,9 +35,12 @@ private slots:
movement->setEndValue(pt);
movement->setDuration( qrand() %500 + 1000); //between 1000->1500 ms animations for movements
//Adjust the flash duration/size a bit
- flash->setDuration(qrand() %300 + 700); //700-1000 ms
- int sz = qrand()%4 + 6; //6-10 pixel square
+ flash->setDuration(qrand() %200 + 500); //500-700 ms
+ int sz = qrand()%4 + 4; //6-10 pixel square
+ //flash->setKeyValueAt(0.5, (qrand()%50) /100.0);
+ //fly->resize(sz,sz);
flash->setKeyValueAt(0.5, QSize(sz,sz)); //half-way point for the flash
+
fly->show();
}
void stopped(){ fly->hide(); }
@@ -46,24 +50,41 @@ public:
fly = new QWidget(parent);
range = parent->size();
maxX = range.width()/4; maxY = range.height()/4;
- fly->setStyleSheet("background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(215, 215, 143, 255), stop:0.83871 rgba(221, 235, 64, 140), stop:0.99 rgba(0, 0, 0, 255), stop:1 transparent);");
+ QString B = QString::number(qrand()%70);
+ QString RY = QString::number(qrand()%200+50);
+ QString style = "background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(245, 245, 143, 200), stop:0.83871 rgba(%1, %1, %2, 140), stop:0.99 rgba(0, 0, 0, 255), stop:1 transparent);";
+ fly->setStyleSheet(style.arg(RY, B) );
//setup the movement animation
movement = new QPropertyAnimation(fly);
movement->setTargetObject(fly);
movement->setPropertyName("pos");
movement->setEndValue( QPoint( qrand() % range.width(), qrand()%range.height()) ); //on anim start, this will become the starting point
//setup the flashing animation
- flash = new QPropertyAnimation(fly);
+ /*QGraphicsOpacityEffect *eff = new QGraphicsOpacityEffect(parent);
+ fly->setGraphicsEffect(eff);
+ flash = new QPropertyAnimation(eff, "opacity");*/
+ flash = new QPropertyAnimation(this);
flash->setTargetObject(fly);
flash->setPropertyName("size");
- flash->setStartValue(QSize(2,2));
+ flash->setStartValue(QSize(0,0));
flash->setEndValue(flash->startValue());
+ //fly->setProperty("opacity",0);
+ //flash->setPropertyName("opacity");
+ //flash->setStartValue(0);
+ //flash->setEndValue(0);
//now setup the order of the animations
this->setLoopCount(100); //do this 100 times
- this->addAnimation(movement);
- this->addAnimation(flash);
+ //Roughly half the number of fireflies with start with movement/flash
+ if(qrand()%2 == 1){
+ this->addAnimation(movement);
+ this->addAnimation(flash);
+ }else{
+ this->addAnimation(flash);
+ this->addAnimation(movement);
+ }
//Start up this firefly
LoopChanged(); //load initial values
+
fly->setGeometry( QRect(movement->startValue().toPoint(), flash->startValue().toSize()) );
connect(this, SIGNAL(currentLoopChanged(int)), this, SLOT(LoopChanged()) );
connect(this, SIGNAL(finished()), this, SLOT(stopped()) );
@@ -78,7 +99,7 @@ private:
QList<Firefly*> fireflies;
public:
- FirefliesAnimation(QWidget *parent, QSettings *set) : BaseAnimGroup(parent, set){}
+ FirefliesAnimation(QWidget *parent) : BaseAnimGroup(parent){}
~FirefliesAnimation(){
this->stop();
//while(fireflies.length()>0){ fireflies.takeAt(0)->deleteLater(); }
@@ -87,14 +108,14 @@ public:
void LoadAnimations(){
while(fireflies.length()>0){ fireflies.takeAt(0)->deleteLater(); }
canvas->setStyleSheet("background: black;");
- int number = settings->value("fireflies/number",100).toInt();
+ int number = readSetting("number",qrand()%30 + 50).toInt();
for(int i=0; i<number; i++){
if(fireflies.length()>number){ continue; }
Firefly *tmp = new Firefly(canvas);
this->addAnimation(tmp);
fireflies << tmp;
}
- while( fireflies.length()>number){ fireflies.takeAt(number)->deleteLater(); }
+
}
};
diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h
index 50d733e9..df75ad67 100644
--- a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h
@@ -36,7 +36,7 @@ private:
double xrand = 0.4; //(qrand()%10+4)/10.0;
double yrand = 0.4; //(qrand()%10+4)/10.0;
- double theta = 1.5707963;
+ double theta = 1.5707963;
//double theta = aTan((start.x() - ref->x())/(start.y() - ref->y()));
QMatrix rotation = QMatrix(qCos(theta), qSin(theta), -qSin(theta), qCos(theta), -ref->x(), -ref->y());
qDebug() << rotation;
@@ -46,9 +46,9 @@ private:
//qDebug() << "Center" << *ref;
QPoint firstP = (QPoint(ref->x() + xrand*start.x()*(qCos(0/step) -qSin(0/step)), ref->y() + yrand*start.y()*(qCos(0/step) -qSin(0/step))));
- QPoint rotFP = rotation.map(firstP);
+ QPoint rotFP = rotation.map(firstP);
qDebug() << "First Point" << firstP;
- qDebug() << "Rotation by Matrix" << rotFP;
+ qDebug() << "Rotation by Matrix" << rotFP;
QPoint lastP = (QPoint(ref->x() + xrand*start.x()*(qCos(PI/step) -qSin(PI/step)), ref->y() + yrand*start.y()*(qCos(PI/step) -qSin(PI/step))));
orbit->setKeyValueAt(0, firstP);
orbit->setKeyValueAt(1, lastP);
@@ -77,13 +77,13 @@ private slots:
orbit->setDuration(10);
}
}*/
- void stopped(){ qDebug() << "Planet stopped"; planet->hide();}
+ void stopped(){ planet->hide();}
public:
Grav(QWidget *parent) : QParallelAnimationGroup(parent){
planet = new QWidget(parent);
range = parent->size();
- QPoint center = parent->geometry().center();
+ QPoint center = QRect(QPoint(0,0), parent->size()).center();;
//Creates a random planet size. Between 12 and 45 pixels
int planet_radius = qRound(1.75* ((qrand()%20)+7) );
@@ -114,7 +114,7 @@ public:
planet->show();
//Ensures the screensaver will not stop until the user wishes to login or it times out
- this->setLoopCount(1); //number of orbits
+ this->setLoopCount(3); //number of orbits
orbit->setDuration( qrand() %1000 + 19000); //20 second orbits
//orbit->setEndValue(path.at(0));
//LoopChanged(0); //load initial values
@@ -145,7 +145,7 @@ private slots:
}
public:
- GravAnimation(QWidget *parent, QSettings *set) : BaseAnimGroup(parent, set){}
+ GravAnimation(QWidget *parent) : BaseAnimGroup(parent){}
~GravAnimation(){
sun->deleteLater();
while(planets.length()>0){ planets.takeAt(0)->deleteLater(); }
@@ -154,7 +154,7 @@ public:
void LoadAnimations(){
//Creates the sun, which is a thin shell with a gradient from green to yellow
sun = new QWidget(canvas);
- QPoint center = canvas->geometry().center();
+ QPoint center = QRect(QPoint(0,0), canvas->size()).center();
QString sunstyle = QStringLiteral("background-color:qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, ") +
QStringLiteral("stop:0 rgba(0, 0, 0, 0), stop:0.38 rgba(0, 0, 0, 0), stop:0.4 rgba(82, 121, 76, 33), stop:0.5 rgba(159, 235, 148, 64), ") +
QStringLiteral("stop:0.6 rgba(255, 238, 150, 129), stop:0.7 rgba(0, 0, 0, 0));");
@@ -164,11 +164,11 @@ public:
wobble = new QPropertyAnimation(sun);
wobble->setPropertyName("geometry");
wobble->setTargetObject(sun);
- QRect initgeom = QRect(center-QPoint(12,12), QSize(60, 60));
+ QRect initgeom = QRect(center-QPoint(30,30), QSize(60, 60));
wobble->setStartValue(initgeom);
wobble->setKeyValueAt(0, initgeom ); //starting point
wobble->setKeyValueAt(1, initgeom ); //starting point
- wobble->setKeyValueAt(0.5, QRect(center-QPoint(18,18), QSize(90, 90))); //starting point
+ wobble->setKeyValueAt(0.5, QRect(center-QPoint(45,45), QSize(90, 90))); //starting point
wobble->setDuration(2000);
wobble->setLoopCount(-1);
this->addAnimation(wobble);
@@ -176,13 +176,13 @@ public:
sun->setGeometry(initgeom);
//Gives the screensaver a black background
- canvas->setStyleSheet("background: black;");
+ //canvas->setStyleSheet("background: black;");
//Pulls number of planets from settings, with 10 as default
- int number = settings->value("planets/number",10).toInt();
+ int number = readSetting("planets/number",qrand()%5+3).toInt();
//Loops through all planets and sets up the animations, then adds them to the base group and vector, which
- qDebug() << "Starting planets";
+ //qDebug() << "Starting planets";
for(int i=0; i<number; i++){
Grav *tmp = new Grav(canvas);
this->addAnimation(tmp);
diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/ImageSlideshow.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/ImageSlideshow.h
index a64144ac..81bc2b35 100644
--- a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/ImageSlideshow.h
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/ImageSlideshow.h
@@ -17,7 +17,7 @@ private:
QPropertyAnimation *bounce, *fading;
QPixmap pixmap;
QStringList imageFiles;
- QString imagePath, scriptPath;
+ QString imagePath, scriptPath, curpixmap;
QSize screenSize;
bool animate, scriptLoad;
@@ -40,30 +40,34 @@ private:
}
void chooseImage() {
- QString randomFile = imagePath+imageFiles[qrand() % imageFiles.size()];
-
- //Choose a new file if the chosen one is not an image
- while(QImageReader::imageFormat(randomFile).isEmpty())
- randomFile = imagePath+imageFiles[qrand() % imageFiles.size()];
- if(scriptLoad){
- QProcess process;
- process.start("/home/zwelch/test.sh");
- process.waitForFinished(1000);
- QByteArray output = process.readAllStandardOutput();
- qDebug() << output;
- pixmap.load(imagePath+imageFiles[qrand() % imageFiles.size()]);
- }else{
- pixmap.load(imagePath+imageFiles[qrand() % imageFiles.size()]);
- }
-
- //If the image is larger than the screen, then shrink the image down to 3/4 it's size (so there's still some bounce)
+ /*if(scriptLoad){
+ QProcess process;
+ process.start("/home/zwelch/test.sh");
+ process.waitForFinished(1000);
+ QByteArray output = process.readAllStandardOutput();
+ //qDebug() << output;
+ //pixmap.load(randomFile);
+ }else{*/
+ //File Load
+ QString randomFile = curpixmap;
+ if(imageFiles.size()>1 || curpixmap.isEmpty()){
+ while(curpixmap==randomFile){ randomFile = imagePath+imageFiles[qrand() % imageFiles.size()]; }
+ }
+ if(curpixmap!=randomFile){
+ curpixmap = randomFile; //save this for later
+ //no need to load the new file or change the label
+ pixmap.load(randomFile);
+ //If the image is larger than the screen, then shrink the image down to 3/4 it's size (so there's still some bounce)
//Scale the pixmap to keep the aspect ratio instead of resizing the label itself
- if(pixmap.width() > screenSize.width() or pixmap.height() > screenSize.height())
- pixmap = pixmap.scaled(screenSize*(3.0/4.0), Qt::KeepAspectRatio);
+ if(pixmap.width() >= (screenSize.width()-10) || pixmap.height() >= (screenSize.height()-10) ){
+ pixmap = pixmap.scaled(screenSize*(3.0/4.0), Qt::KeepAspectRatio);
+ }
+ //Set pixmap to the image label
+ image->setPixmap(pixmap);
+ image->resize(pixmap.size());
+ }
+ //}
- //Set pixmap to the image label
- image->setPixmap(pixmap);
- image->resize(pixmap.size());
}
private slots:
@@ -72,7 +76,7 @@ private slots:
chooseImage();
setupAnimation();
}
- void stopped(){ qDebug() << "Image Stopped"; image->hide();}
+ void stopped(){ image->hide();}
public:
ImageSlideshow(QWidget *parent, QString path, bool animate, bool scriptLoad, QString scriptPath) : QParallelAnimationGroup(parent){
@@ -80,20 +84,25 @@ public:
image = new QLabel(parent);
screenSize = parent->size();
this->animate = animate;
- this->scriptLoad = scriptLoad;
- this->scriptPath = scriptPath;
-
+ this->scriptLoad = scriptLoad;
+ this->scriptPath = scriptPath;
+
//Generate the list of files in the directory
imageFiles = QDir(imagePath).entryList(QDir::Files);
- if(imageFiles.empty())
- qDebug() << "Current image file path has no files.";
-
- //Change some default settings for the image. If scaledContents is false, the image will be cut off if resized
- image->setScaledContents(true);
- image->setAlignment(Qt::AlignHCenter);
-
- //Load a random initial image
- chooseImage();
+ //Ensure all the files are actually images
+ for(int i=0; i<imageFiles.length(); i++){
+ if(QImageReader::imageFormat(imagePath+"/"+imageFiles[i]).isEmpty()){ imageFiles.removeAt(i); i--; }
+ }
+ if(imageFiles.empty()){
+ qDebug() << "Current image file path has no files.";
+ image->setText("No image files found:\n"+imagePath);
+ }else{
+ //Change some default settings for the image. If scaledContents is false, the image will be cut off if resized
+ image->setScaledContents(true);
+ image->setAlignment(Qt::AlignHCenter);
+ //Load a random initial image
+ chooseImage();
+ }
//Create the animation that moves the image across the screen
bounce = new QPropertyAnimation(image, "pos", parent);
@@ -117,8 +126,8 @@ public:
//If no animation, center the image in the middle of the screen
image->move(QPoint((parent->width()-image->width())/2,(parent->height()-image->height())/2));
- //Loop through 30 times for a total for 4 minutes
- this->setLoopCount(30);
+ //Loop through 15 times for a total for 2 minutes
+ this->setLoopCount(15);
bounce->setDuration(8000);
fading->setDuration(8000);
@@ -132,7 +141,7 @@ public:
class ImageAnimation: public BaseAnimGroup{
Q_OBJECT
public:
- ImageAnimation(QWidget *parent, QSettings *set) : BaseAnimGroup(parent, set){}
+ ImageAnimation(QWidget *parent) : BaseAnimGroup(parent){}
~ImageAnimation(){
this->stop();
}
@@ -140,13 +149,14 @@ public:
void LoadAnimations(){
canvas->setStyleSheet("background: black;");
//Load the path of the images from the configuration file (default /usr/local/backgrounds/)
- QString imagePath = settings->value("imageSlideshow/path","/usr/local/backgrounds/").toString();
+ QString imagePath = readSetting("path", LOS::LuminaShare()+"../wallpapers/").toString();
//Load whether to animate the image (default true)
- bool animate = settings->value("imageSlideshow/animate", true).toBool();
- bool scriptLoad = settings->value("imageSlideshow/scriptLoad", true).toBool();
- QString scriptPath;
- if(scriptLoad)
- scriptPath = settings->value("imageSlideshow/scriptPath", "/usr/local/backgrounds/script.sh").toString();
+ bool animate = readSetting("animate", true).toBool();
+ bool scriptLoad = readSetting("scriptLoad", true).toBool();
+ QString scriptPath;
+ if(scriptLoad){
+ scriptPath = readSetting("scriptPath", "/usr/local/backgrounds/script.sh").toString();
+ }
ImageSlideshow *tmp = new ImageSlideshow(canvas, imagePath, animate, scriptLoad, scriptPath);
this->addAnimation(tmp);
}
diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/SampleAnimation.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/SampleAnimation.h
index c2bb0c96..c7a8b237 100644
--- a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/SampleAnimation.h
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/SampleAnimation.h
@@ -18,7 +18,7 @@ private:
QWidget *ball;
public:
- SampleAnimation(QWidget *parent, QSettings *set) : BaseAnimGroup(parent, set){}
+ SampleAnimation(QWidget *parent) : BaseAnimGroup(parent){}
~SampleAnimation(){ this->stop(); delete ball; }
void LoadAnimations(){
diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Text.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Text.h
index 3ec0af82..6ba18b22 100644
--- a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Text.h
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Text.h
@@ -12,6 +12,8 @@
#include <QParallelAnimationGroup>
#include <QtMath>
+#include <unistd.h>
+
class Text: public QParallelAnimationGroup{
Q_OBJECT
private:
@@ -38,15 +40,15 @@ private slots:
void stopped(){ qDebug() << "Text Stopped"; text->hide();}
public:
- Text(QWidget *parent) : QParallelAnimationGroup(parent){
+ Text(QWidget *parent, QString display) : QParallelAnimationGroup(parent){
text = new QLabel(parent);
range = parent->size();
- QPoint center = parent->geometry().center();
+ QPoint center = QRect( QPoint(0,0), parent->size()).center();
QString color = "rgba(" + QString::number(qrand() % 206 + 50) + ", " + QString::number(qrand() % 206 + 50) + ", " + QString::number(qrand() % 206 + 50);
- text->setStyleSheet("QLabel {background-color: rgba(255, 255, 255, 10); color: " + color + "); }");
+ text->setStyleSheet("QLabel {background-color: transparent; color: " + color + "); }");
text->setFont(QFont("Courier", 24, QFont::Bold));
- text->setText("test");
+ text->setText(display);
QFontMetrics metrics(text->font());
text->setMinimumSize(QSize( metrics.width(text->text())+10, metrics.height()*text->text().count("\n") +10));
@@ -60,7 +62,7 @@ public:
v.setY((qrand() % 100 + 50) * qPow(-1, qrand() % 2));
movement->setStartValue(center);
//Ensures the screensaver will not stop until the user wishes to login or it times out
- this->setLoopCount(2000); //number of movements
+ this->setLoopCount(200); //number of wall bounces
movement->setDuration(200);
movement->setEndValue(QPoint(qrand() % (int)range.height(), qrand() % range.width()));
LoopChanged(); //load initial values
@@ -75,14 +77,22 @@ public:
class TextAnimation : public BaseAnimGroup{
Q_OBJECT
public:
- TextAnimation(QWidget *parent, QSettings *set) : BaseAnimGroup(parent, set){}
+ TextAnimation(QWidget *parent) : BaseAnimGroup(parent){}
~TextAnimation(){
this->stop();
}
void LoadAnimations(){
canvas->setStyleSheet("background: black;");
- Text *tmp = new Text(canvas);
+ //Read off the text that needs to be displayed
+ QString textToShow = readSetting("text", "").toString();
+ if(textToShow.isEmpty()){
+ char hname[300];
+ gethostname(hname, 300);
+ textToShow = QString::fromLocal8Bit(hname);
+ }
+ // Now create the animation
+ Text *tmp = new Text(canvas, textToShow);
this->addAnimation(tmp);
}
diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/VideoSlideshow.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/VideoSlideshow.h
index cc3c1b83..358b4bfb 100644
--- a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/VideoSlideshow.h
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/VideoSlideshow.h
@@ -10,55 +10,19 @@
#include "global-includes.h"
#include "BaseAnimGroup.h"
-class VideoSlideshow: public QPropertyAnimation{
- Q_OBJECT
-public:
- VideoSlideshow(QWidget *parent, QVideoWidget *videoWidget) : QPropertyAnimation(videoWidget, "pos", parent){
- this->setKeyValueAt(0,QPoint(0,0));
- this->setKeyValueAt(1,QPoint(0,0));
- this->setDuration(1000000);
- this->setLoopCount(-1);
- }
- ~VideoSlideshow(){}
-
-};
-
class VideoAnimation: public BaseAnimGroup{
Q_OBJECT
private:
- QString videoPath;
- VideoSlideshow *tmp;
+ QString videoPath, singleVideo;
QVideoWidget *videoWidget;
QMediaPlayer *video;
QStringList videoFiles;
- bool multimonitor;
+ bool multiple;
private slots:
- void startVideo(QAbstractAnimation::State state) {
- qDebug() << "Status: " << video->mediaStatus() << "New Animation State:" << state;
- if(state==QAbstractAnimation::Running){
- video->setVolume(100);
- video->play();
- }
- if(state==QAbstractAnimation::Stopped && video->state()!=QMediaPlayer::StoppedState){
- video->stop();
- }
- }
-
- void stopVideo() {
- if(video->state() == QMediaPlayer::StoppedState) {
- qDebug() << "Stopping Animation";
- //this->deleteLater();
- videoWidget->hide();
- tmp->stop();
- //tmp->deleteLater();
- videoWidget->deleteLater();
- video->deleteLater();
- }
- }
public:
- VideoAnimation(QWidget *parent, QSettings *set) : BaseAnimGroup(parent, set){}
+ VideoAnimation(QWidget *parent) : BaseAnimGroup(parent){}
~VideoAnimation(){
this->stop();
@@ -68,36 +32,53 @@ public:
canvas->setStyleSheet("background: black;");
//Load the path of the videos from the configuration file (default /usr/local/videos/)
- videoPath = settings->value("videoSlideshow/path","/usr/local/videos").toString();
+ videoPath = readSetting("path","/usr/local/videos").toString();
+ singleVideo = readSetting("videoLocation","").toString();
+ multiple = readSetting("multiple",true).toBool();
if(!videoPath.endsWith("/")){ videoPath.append("/"); }
//Set whether to copy videos on two monitors or play different videos
- multimonitor = settings->value("videoSlideshow/multimonitor",true).toBool();
+ //multimonitor = settings->value("videoSlideshow/multimonitor",true).toBool();
+ //Set up the VideoWidget
video = new QMediaPlayer(canvas, QMediaPlayer::VideoSurface);
videoWidget = new QVideoWidget(canvas);
+ video->setVideoOutput(videoWidget);
videoWidget->setGeometry(QRect(QPoint(0,0), canvas->size()));
- tmp = new VideoSlideshow(canvas, videoWidget);
- this->addAnimation(tmp);
-
//Generate the list of files in the directory
videoFiles = QDir(videoPath).entryList(QDir::Files);
- if(videoFiles.empty())
- qDebug() << "Current video file path has no files.";
+ if(videoFiles.empty()){
+ qDebug() << "Current video file path has no files:" << videoPath;
+ return;
+ }
- this->setLoopCount(1);
+ if(singleVideo.isNull())
+ singleVideo = videoPath+videoFiles[0];
- QUrl url = QUrl::fromLocalFile(videoPath+videoFiles[qrand() % videoFiles.size()]);
- video->setMedia(url);
- qDebug() << url;
- video->setVideoOutput(videoWidget);
+ //Loading a random file from a directory
+ QDesktopWidget *dw = new QDesktopWidget();
+ QMediaPlaylist *playlist = new QMediaPlaylist();
+ if(multiple) {
+ for(int i = 0; i < videoFiles.size(); i++){
+ playlist->addMedia(QUrl::fromLocalFile(videoPath+videoFiles[i]));
+ }
+ playlist->shuffle();
+ }else{
+ playlist->addMedia(QUrl::fromLocalFile(singleVideo));
+ playlist->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);
+ }
videoWidget->show();
+ if(multiple)
+ video->setPlaylist(playlist);
+
+ //Only play sound for one monitor to prevent messed up audio
+ if(dw->screenNumber(canvas) == 0)
+ video->setVolume(100);
+ else
+ video->setVolume(0);
- qDebug() << "VideoWidget Displayed";
- connect(tmp, SIGNAL(stateChanged(QAbstractAnimation::State, QAbstractAnimation::State)), this, SLOT(startVideo(QAbstractAnimation::State)) );
- //connect(video, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)), this, SLOT(startVideo()) );
- connect(video, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(stopVideo()) );
+ video->play();
}
};
diff --git a/src-qt5/core/lumina-desktop/AppMenu.cpp b/src-qt5/core/lumina-desktop/AppMenu.cpp
index c3c52375..9ad51c93 100644
--- a/src-qt5/core/lumina-desktop/AppMenu.cpp
+++ b/src-qt5/core/lumina-desktop/AppMenu.cpp
@@ -142,7 +142,7 @@ void AppMenu::updateAppList(){
else{ ICONS->loadIcon(sact, appL[a]->icon); }
sact->setToolTip(appL[a]->comment);
sact->setWhatsThis("-action \""+appL[a]->actions[sa].ID+"\" \""+appL[a]->filePath+"\"");
- submenu->addAction(sact);
+ submenu->addAction(sact);
}
menu->addMenu(submenu);
}
diff --git a/src-qt5/core/lumina-desktop/LDesktop.cpp b/src-qt5/core/lumina-desktop/LDesktop.cpp
index 37bc7ffa..f9ea1534 100644
--- a/src-qt5/core/lumina-desktop/LDesktop.cpp
+++ b/src-qt5/core/lumina-desktop/LDesktop.cpp
@@ -88,7 +88,7 @@ QRect LDesktop::availableScreenGeom(){
return globalWorkRect; //saved from previous calculations
}else{
return LSession::handle()->screenGeom( Screen() );
- }
+ }
}
void LDesktop::UpdateGeometry(){
@@ -150,7 +150,7 @@ void LDesktop::checkResolution(){
}else if(scrn.width()==oldWidth && scrn.height()==oldHeight){
//nothing to do - same as before
}else{
- //Calculate the scale factor between the old/new sizes in each dimension
+ //Calculate the scale factor between the old/new sizes in each dimension
// and forward that on to all the interface elements
double xscale = scrn.width()/((double) oldWidth);
double yscale = scrn.height()/((double) oldHeight);
@@ -194,7 +194,7 @@ void LDesktop::checkResolution(){
}
}
DP->sync(); //make sure it gets saved to disk right away
-
+
}
issyncing = false;
}
@@ -238,7 +238,7 @@ void LDesktop::InitDesktop(){
bgWindow->setWindowOpacity(0.0);
connect(bgWindow, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(ShowMenu()) );*/
if(DEBUG){ qDebug() << "Create bgDesktop"; }
- bgDesktop = new LDesktopPluginSpace();
+ bgDesktop = new LDesktopPluginSpace();
int grid = settings->value(DPREFIX+"GridSize",-1).toInt();
if(grid<0 && LSession::desktop()->screenGeometry(Screen()).height() > 2000){ grid = 200; }
else if(grid<0){ grid = 100; }
@@ -266,7 +266,7 @@ void LDesktop::InitDesktop(){
}
void LDesktop::SettingsChanged(){
- if(issyncing){ return; } //don't refresh for internal modifications to the
+ if(issyncing){ return; } //don't refresh for internal modifications to the
issyncing = true;
qDebug() << "Found Settings Change:" << screenID;
settings->sync(); //make sure to sync with external settings changes
diff --git a/src-qt5/core/lumina-desktop/LSession.cpp b/src-qt5/core/lumina-desktop/LSession.cpp
index bbed6d79..2a1ec783 100644
--- a/src-qt5/core/lumina-desktop/LSession.cpp
+++ b/src-qt5/core/lumina-desktop/LSession.cpp
@@ -572,7 +572,7 @@ void LSession::SessionEnding(){
// SYSTEM ACCESS
//===============
void LSession::LaunchApplication(QString cmd){
- LSession::setOverrideCursor(QCursor(Qt::BusyCursor));
+ //LSession::setOverrideCursor(QCursor(Qt::BusyCursor));
ExternalProcess::launch(cmd);
//QProcess::startDetached(cmd);
}
diff --git a/src-qt5/core/lumina-desktop/SystemWindow.cpp b/src-qt5/core/lumina-desktop/SystemWindow.cpp
index cd09c9bd..c709bb2a 100644
--- a/src-qt5/core/lumina-desktop/SystemWindow.cpp
+++ b/src-qt5/core/lumina-desktop/SystemWindow.cpp
@@ -12,6 +12,7 @@
SystemWindow::SystemWindow() : QDialog(), ui(new Ui::SystemWindow){
ui->setupUi(this); //load the designer file
+ this->setObjectName("LeaveDialog");
//Setup the window flags
this->setWindowFlags( Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
//Setup the icons based on the current theme
diff --git a/src-qt5/core/lumina-desktop/defaults/luminaDesktop-TrueOS.conf b/src-qt5/core/lumina-desktop/defaults/luminaDesktop-TrueOS.conf
index c1f3a194..e453c0b8 100644
--- a/src-qt5/core/lumina-desktop/defaults/luminaDesktop-TrueOS.conf
+++ b/src-qt5/core/lumina-desktop/defaults/luminaDesktop-TrueOS.conf
@@ -42,6 +42,7 @@ mime_default_unknown/*=lumina-textedit.desktop
mime_default_application/x-shellscript=lumina-textedit.desktop
mime_default_application/pdf_ifexists=pc-pdfviewer.desktop
mime_default_application/pdf_ifexists=okular.desktop
+mime_default_application/pdf_ifexists=lumina-pdf.desktop
mime_default_application/zip_ifexists=lumina-archiver.desktop
mime_default_application/x-compressed-tar_ifexists=lumina-archiver.desktop
mime_default_application/x-bzip-compressed-tar_ifexists=lumina-archiver.desktop
@@ -51,17 +52,17 @@ mime_default_application/x-xz-compressed-tar_ifexists=lumina-archiver.desktop
mime_default_application/x-tar_ifexists=lumina-archiver.desktop
#THEME SETTINGS
-theme_themefile=Glass #Name of the theme to use (disable for Lumina-Default)
-theme_colorfile=Lumina-Glass #Name of the color spec file to use for theming
-theme_iconset=oxygen #Name of the icon theme to use
-theme_font=Arial #Name of the font family to use
+theme_themefile=DarkGlass #Name of the theme to use (disable for Lumina-Default)
+theme_colorfile=Black #Name of the color spec file to use for theming
+theme_iconset=material-design-dark #Name of the icon theme to use
+theme_font=Noto Sans #Name of the font family to use
theme_fontsize=10pt #Default size of the fonts to use on the desktop (can also use a percentage of the screen height (<number>%) )
#DESKTOP SETTINGS (used for the primary screen in multi-screen setups)
desktop_visiblepanels=1 #[0 - 12] The number of panels visible by default
-#desktop_backgroundfiles= #list of absolute file paths for image files (disable for Lumina default)
+desktop_backgroundfiles=/usr/local/share/wallpapers/TrueOS/trueos-1-4k.png #list of absolute file paths for image files (disable for Lumina default)
desktop_backgroundrotateminutes=5 #[positive integer] number of minutes between background rotations (if multiple files)
-desktop_plugins=rssreader #list of plugins to be shown on the desktop by default
+#desktop_plugins= #list of plugins to be shown on the desktop by default
desktop_generate_icons=true #[true/false] Auto-generate launchers for ~/Desktop items
#PANEL SETTINGS (preface with panel1.<setting> or panel2.<setting>, depending on the number of panels you have visible by default)
@@ -70,7 +71,7 @@ panel1_pixelsize=3.5%H #number of pixels wide/high the panel should be (or <numb
panel1_autohide=false #[true/false] Have the panel become visible on mouse-over
panel1_plugins=systemstart, taskmanager-nogroups, spacer, systemtray, clock, battery #list of plugins for the panel
panel1_pinlocation=center #[left/center/right] Note:[left/right] corresponds to [top/bottom] for vertical panels
-panel1_edgepercent=99 #[1->100] percentage of the screen edge to use
+panel1_edgepercent=100 #[1->100] percentage of the screen edge to use
#MENU SETTINGS (right-click menu)
menu_plugins=terminal, filemanager, applications, line, settings, line, lockdesktop#list of menu plugins to show
@@ -96,6 +97,19 @@ favorites_add_ifexists=~/Videos
#quicklaunch_add=<file/dir path> #Create a quicklaunch shortcut for this file/dir
#quicklaunch_add_ifexists=<file/dir path> #Create a quicklaunch shortcut for this file/dir if the file/dir exists
+#Desktop Folder symlinks
+#desktoplinks_add=<file/dir path>
+desktoplinks_add=firefox.desktop
+desktoplinks_add=chromium-browser.desktop
+desktoplinks_add=qupzilla.desktop
+desktoplinks_add=thunderbird.desktop
+desktoplinks_add=trojita.desktop
+desktoplinks_add=vlc.desktop
+desktoplinks_add=pccontrol.desktop
+desktoplinks_add=lthemeengine.desktop
+desktoplinks_add=lumina-config.desktop
+desktoplinks_add=appcafe.desktop
+desktoplinks_add=handbook.desktop
#Generic scripts/utilities to run for any additional setup procedures
# These are always run after all other settings are saved
#Format: usersetup_run=<generic command to run>
diff --git a/src-qt5/core/lumina-desktop/defaults/luminaDesktop.conf b/src-qt5/core/lumina-desktop/defaults/luminaDesktop.conf
index 46d00053..1327f148 100644
--- a/src-qt5/core/lumina-desktop/defaults/luminaDesktop.conf
+++ b/src-qt5/core/lumina-desktop/defaults/luminaDesktop.conf
@@ -34,9 +34,12 @@ session_default_email_ifexists=trojita.desktop
#DEFAULT UTILITIES FOR INDIVIDUAL MIME TYPES
# Format: mime_default_<mimetype>[_ifexists]=<*.desktop file>
mime_default_text/*_ifexists=lumina-textedit.desktop
+mime_default_audio/*_ifexists=lumina-mediaplayer.desktop
mime_default_audio/*_ifexists=vlc.desktop
+mime_default_video/*_ifexists=lumina-mediaplayer.desktop
mime_default_video/*_ifexists=vlc.desktop
mime_default_application/zip_ifexists=lumina-archiver.desktop
+mime_default_application/pdf_ifexists=lumina-pdf.desktop
mime_default_application/x-compressed-tar_ifexists=lumina-archiver.desktop
mime_default_application/x-bzip-compressed-tar_ifexists=lumina-archiver.desktop
mime_default_application/x-lrzip-compressed-tar_ifexists=lumina-archiver.desktop
@@ -47,9 +50,9 @@ mime_default_unknown/*=lumina-textedit.desktop
mime_default_application/x-shellscript=lumina-textedit.desktop
#THEME SETTINGS
-theme_themefile=Glass #Name of the theme to use (disable for Lumina-Default)
-theme_colorfile=Lumina-Glass #Name of the color spec file to use for theming
-theme_iconset=oxygen #Name of the icon theme to use
+theme_themefile=DarkGlass #Name of the theme to use (disable for Lumina-Default)
+theme_colorfile=Black #Name of the color spec file to use for theming
+theme_iconset=material-design-dark #Name of the icon theme to use
theme_font=Arial #Name of the font family to use
theme_fontsize=10pt #Default size of the fonts to use on the desktop (can also use a percentage of the screen height (<number>%) )
@@ -66,7 +69,7 @@ panel1_pixelsize=3.5%H #number of pixels wide/high the panel should be (or <numb
panel1_autohide=false #[true/false] Have the panel become visible on mouse-over
panel1_plugins=systemstart, taskmanager-nogroups, spacer, systemtray, clock, battery #list of plugins for the panel
panel1_pinlocation=center #[left/center/right] Note:[left/right] corresponds to [top/bottom] for vertical panels
-panel1_edgepercent=99 #[1->100] percentage of the screen edge to use
+panel1_edgepercent=100 #[1->100] percentage of the screen edge to use
panel2_location=top
panel2_pixelsize=3%H
diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h
index 34a75ce8..c8e3a475 100644
--- a/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h
+++ b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h
@@ -30,7 +30,7 @@ public:
~AppLauncherPlugin(){}
void Cleanup(); //special function for final cleanup
-
+
private:
QToolButton *button;
QFileSystemWatcher *watcher;
@@ -45,7 +45,7 @@ private slots:
void iconLoaded(QString);
//void openContextMenu();
-
+
//void increaseIconSize();
//void decreaseIconSize();
//void deleteFile();
@@ -63,11 +63,16 @@ public slots:
void LocaleChange(){
loadButton(); //force reload
}
-
+
protected:
void resizeEvent(QResizeEvent *ev){
LDPlugin::resizeEvent(ev);
QTimer::singleShot(100, this, SLOT(loadButton()) );
}
+ void changeEvent(QEvent *ev){
+ LDPlugin::changeEvent(ev);
+ QEvent::Type tmp = ev->type();
+ if(tmp == QEvent::StyleChange || tmp==QEvent::ThemeChange || tmp==QEvent::LanguageChange || tmp==QEvent::LocaleChange){ loadButton(); }
+ }
};
#endif
diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/systemmonitor/MonitorWidget.cpp b/src-qt5/core/lumina-desktop/desktop-plugins/systemmonitor/MonitorWidget.cpp
index 951bcc98..7097e2a9 100644
--- a/src-qt5/core/lumina-desktop/desktop-plugins/systemmonitor/MonitorWidget.cpp
+++ b/src-qt5/core/lumina-desktop/desktop-plugins/systemmonitor/MonitorWidget.cpp
@@ -17,6 +17,9 @@ MonitorWidget::MonitorWidget(QWidget *parent) : QWidget(parent), ui(new Ui::Moni
upTimer->setInterval(2000); //update every 2 seconds
connect(upTimer, SIGNAL(timeout()), this, SLOT(UpdateStats()) );
LoadIcons();
+ ui->label->setText( tr("CPU Temp:") );
+ ui->label_2->setText( tr("CPU Usage:") );
+ ui->label_3->setText( tr("Mem Usage:") );
upTimer->start();
}
@@ -25,7 +28,7 @@ MonitorWidget::~MonitorWidget(){
}
void MonitorWidget::LoadIcons(){
- ui->tabWidget->setTabIcon(0,LXDG::findIcon("appointment-recurring","") ); //Summary
+ ui->tabWidget->setTabIcon(0,LXDG::findIcon("appointment-blank","") ); //Summary
ui->tabWidget->setTabIcon(1,LXDG::findIcon("drive-harddisk","") ); //Disk Usage
//ui->tabWidget->setTabIcon(1,LXDG::findIcon("cpu","") ); //CPU Log
//ui->tabWidget->setTabIcon(2,LXDG::findIcon("media-flash-memory-stick","") ); //Mem Log
@@ -60,4 +63,4 @@ SysMonitorPlugin::SysMonitorPlugin(QWidget *parent, QString ID) : LDPlugin(paren
SysMonitorPlugin::~SysMonitorPlugin(){
//qDebug() << "Remove SysMonitorPlugin";
-} \ No newline at end of file
+}
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts
index c603fd8c..4cce6320 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Работен плот</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Отказ</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (външно захранване)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (приблизително %2)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>остават %1%</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Работен плот %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Несортирани</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Мултимедия</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Разработка</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Образование</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Игри</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Изображения</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Мрежа</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Офис</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Наука</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Настройки</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Инструменти</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Несортирани</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts
index 4cd0c63e..a7809769 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Escriptori</translation>
</message>
@@ -1461,37 +1466,37 @@
<message>
<location filename="../panel-plugins/systemstart/StartMenu.cpp" line="291"/>
<source>Yes</source>
- <translation type="unfinished"></translation>
+ <translation>Sí</translation>
</message>
<message>
<location filename="../panel-plugins/systemstart/StartMenu.cpp" line="292"/>
<source>No</source>
- <translation type="unfinished"></translation>
+ <translation>No</translation>
</message>
<message>
<location filename="../panel-plugins/systemstart/StartMenu.cpp" line="293"/>
<source>Cancel</source>
- <translation type="unfinished">Cancel·la</translation>
+ <translation>Cancel·la</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (connectat)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 estimat)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>Resta %1%</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Espai de treball %1/%2</translation>
</message>
@@ -1547,12 +1552,12 @@
<message>
<location filename="../SystemWindow.cpp" line="58"/>
<source>Yes</source>
- <translation type="unfinished"></translation>
+ <translation>Sí</translation>
</message>
<message>
<location filename="../SystemWindow.cpp" line="59"/>
<source>No</source>
- <translation type="unfinished"></translation>
+ <translation>No</translation>
</message>
</context>
<context>
@@ -1759,4 +1764,72 @@
<translation>Sense ordenar</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimèdia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Desenvolupament</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Educació</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Jocs</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Gràfics</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Xarxa</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Oficina</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Ciència</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Configuració</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistema</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Utilitat</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts
index adc843ed..5d5f26cd 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Plocha</translation>
</message>
@@ -1461,37 +1466,37 @@
<message>
<location filename="../panel-plugins/systemstart/StartMenu.cpp" line="291"/>
<source>Yes</source>
- <translation type="unfinished"></translation>
+ <translation>Ano</translation>
</message>
<message>
<location filename="../panel-plugins/systemstart/StartMenu.cpp" line="292"/>
<source>No</source>
- <translation type="unfinished"></translation>
+ <translation>Ne</translation>
</message>
<message>
<location filename="../panel-plugins/systemstart/StartMenu.cpp" line="293"/>
<source>Cancel</source>
- <translation type="unfinished">Storno</translation>
+ <translation>Storno</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (zapojeno)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (odhadováno %2)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% zbývá</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Pracovní plocha %1/%2</translation>
</message>
@@ -1547,12 +1552,12 @@
<message>
<location filename="../SystemWindow.cpp" line="58"/>
<source>Yes</source>
- <translation type="unfinished"></translation>
+ <translation>Ano</translation>
</message>
<message>
<location filename="../SystemWindow.cpp" line="59"/>
<source>No</source>
- <translation type="unfinished"></translation>
+ <translation>Ne</translation>
</message>
</context>
<context>
@@ -1759,4 +1764,72 @@
<translation>Nezařazené</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimédia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Vývoj</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Výuka</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Hry</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafika</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Síť</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Kancelář</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Věda</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Nastavení</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Systém</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Nástroje</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts
index f791a3d9..00ff3157 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Skrivebord</translation>
</message>
@@ -1461,37 +1466,37 @@
<message>
<location filename="../panel-plugins/systemstart/StartMenu.cpp" line="291"/>
<source>Yes</source>
- <translation type="unfinished"></translation>
+ <translation>Ja</translation>
</message>
<message>
<location filename="../panel-plugins/systemstart/StartMenu.cpp" line="292"/>
<source>No</source>
- <translation type="unfinished"></translation>
+ <translation>Nej</translation>
</message>
<message>
<location filename="../panel-plugins/systemstart/StartMenu.cpp" line="293"/>
<source>Cancel</source>
- <translation type="unfinished">Annuller</translation>
+ <translation>Annuller</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (tilsluttet)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 estimeret)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% tilbage</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Arbejdsområde %1/%2</translation>
</message>
@@ -1547,12 +1552,12 @@
<message>
<location filename="../SystemWindow.cpp" line="58"/>
<source>Yes</source>
- <translation type="unfinished"></translation>
+ <translation>Ja</translation>
</message>
<message>
<location filename="../SystemWindow.cpp" line="59"/>
<source>No</source>
- <translation type="unfinished"></translation>
+ <translation>Nej</translation>
</message>
</context>
<context>
@@ -1759,4 +1764,72 @@
<translation>Usorteret</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedie</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Udvikling</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Uddannelse</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Spil</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafik</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Netværk</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Kontor</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Videnskab</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Indstillinger</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">System</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Hjælpeværktøj</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Usorteret</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts
index 80b8eb9d..67d0805c 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Arbeitsfläche</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Abbrechen</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (Eingesteckt)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 Geschätzt)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% verbleibend</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Arbeitsbereich %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Unsortiert</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Entwicklung</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Bildung</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Spiele</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafik</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Netzwerk</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Büro</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Wissenschaft</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Einstellungen</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">System</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Dienstprogramm</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Unsortiert</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts
index 118b48b1..f9d60a2c 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_AU.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_AU.ts
index 3cf7e09c..d67d8301 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_AU.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_AU.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Desktop</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Cancel</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (Plugged In)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 Estimated)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% Remaining</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Workspace %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Unsorted</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Development</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Education</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Games</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Graphics</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Network</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Office</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Science</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Settings</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">System</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Utility</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Unsorted</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts
index db35d013..e9bd9fde 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Desktop</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Cancel</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (Plugged In)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 Estimated)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% Remaining</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Workspace %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Unsorted</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Development</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Education</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Games</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Graphics</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Network</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Office</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Science</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Settings</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">System</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Utility</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Unsorted</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts
index 319f90ab..54b2bec2 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Escritorio</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Cancelar</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (Conectado)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 Estimado)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% Restante</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Área de Trabajo %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Sin Ordenar</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Desarrollo</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Educación</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Juegos</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Gráficos</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Red</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Oficina</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Ciencia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Configuración</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistema</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Utilerías</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Sin Ordenar</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts
index 4fbe1d5b..ef19e5a0 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished">Töölaud</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Loobu</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished">Tööruum %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Sortimata</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimeedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Arendus</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Haridus</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Mängud</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Graafika</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Võrk</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Kontor</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Teadus</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Sätted</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Süsteem</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Tööriistad</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Sortimata</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts
index 248cc262..c8a65107 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Utzi</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished">Laneko area %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Garapena</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Heziketa</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Jokoak</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafikoak</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Sarea</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Bulegoa</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Zientzia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Ezarpenak</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistema</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts
index e45c6072..96254899 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts
index ff8e867c..80a27a4f 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Työpöytä</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Peru</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1 % (verkkovirta)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1 % (arviolta %2)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1 % jäljellä</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Työtila %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Lajittelematta</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Kehitystyökalut</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Kasvatus</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Pelit</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafiikka</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Verkko</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Toimisto</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Tiede</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Asetukset</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Järjestelmä</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Työkalu</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Lajittelematta</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts
index f85a0380..1c3189ed 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Bureau</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Annuler</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (Branchée)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 Estimé)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% restant(s)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Espace de Travail %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Non Trié</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimédia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Développement</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Éducation</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Jeux</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Graphiques</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Réseau</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Sciences</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Paramètres</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Système</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts
index fabf3f31..b9ff009c 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished">שולחן עבודה</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">ביטול</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">לומדות</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">משחקים</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">גרפיקה</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">אינטרנט</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">משרד</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">מדע</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">הגדרות</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">מערכת</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts
index f1cb1d5a..ee97464d 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished">डेस्कटॉप</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">रद्द</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1%(प्लग इन)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 लगभग)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% शेष</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>कार्यस्थल %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>अवर्गीकृत</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">मल्टीमीडिया</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">विकास</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">पढाई</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">खेल</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">चित्र</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">नेटवर्क</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">कार्यालय</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">विज्ञान</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">सुविधाएँ</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">शराब</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">अवर्गीकृत</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts
index 30cc030d..10c49265 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Asztal</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Mégsem</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>%1/%2 munkaterület</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Nem rendszerezett</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimédia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Fejlesztés</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Oktatás</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Játékok</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafika</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Hálózat</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Iroda</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Tudomány</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Beállítások</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Rendszer</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Segédeszközök</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts
index 38cdee0f..efe0dc6a 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished">Layar Kerja Utama</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Batalkan</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished">%1% (Terpasang Dalam)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 Perkiraan)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% Sisa</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished">Ruang kerja %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Tak terurut</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Pengembangan</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Edukasi</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Permainan</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafis</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Jaringan</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Kantor</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Sains</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Pengaturan</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistem</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Utilitas</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Tak terurut</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts
index 32aae413..ba24ba63 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Desktop</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Cancella</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (Plugged In)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 Stimato)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% Rimanente</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Spazio Lavoro %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Non ordinato</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Sviluppo</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Educazione</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Giochi</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Rete</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Ufficio</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Scienza</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Impostazioni</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistema</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Utilità</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Non ordinato</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts
index 0179804f..0fbeb00e 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts
@@ -838,6 +838,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -855,8 +860,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translatorcomment>これ、ファイルパスなので、「デスクトップ」と訳したらまずい</translatorcomment>
<translation>Desktop</translation>
@@ -1491,24 +1496,24 @@
<translation type="unfinished">キャンセル</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (電源接続中)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (推定残り時間: %2)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>残り %1%</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>ワークスペース %1/%2</translation>
</message>
@@ -1783,4 +1788,72 @@
<translation>未分類</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">マルチメディア</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">開発</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">教育</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">ゲーム</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">グラフィックス</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">ネットワーク</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">オフィス</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">科学</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">設定</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">システム</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">ユーティリティー</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">未分類</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts
index b7a23143..05fa8608 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished">바탕 화면</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">취소</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (연결됨)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 예상)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% 남음</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>작업 공간 %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>미분류</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">멀티미디어</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">개발</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">교육</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">게임</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">그래픽</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">네트워크</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">업무</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">과학</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">설정</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">시스템</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">유틸리티</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">와인</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">미분류</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts
index 55cc8ec1..35e14e86 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Darbalaukis</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Atsisakyti</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (Įdėta)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (Apytikriai %2)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>Liko %1%</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Darbo sritis %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Nesurūšiuota</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedija</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Programavimas</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Švietimas</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Žaidimai</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafika</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Tinklas</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Raštinė</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Mokslas</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Nustatymai</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistema</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Paslaugų programos</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Nesurūšiuota</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts
index 5d7d9e0f..c8581d11 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Darbvirsma</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Atcelt</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (pievienots)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 paredzamais)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% atlicis</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Darbvieta %1/%2</translation>
</message>
@@ -1760,4 +1765,72 @@
<translation>Nesakārtots</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multivide</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Izstrāde</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Izglītība</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Spēles</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafika</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Tīkls</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Birojs</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Zinātne</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Iestatījumi</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistēma</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Nesakārtots</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts
index 3e0fc664..30025269 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Bureaublad</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Annuleren</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (Oplaadkabel is verbonden)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 geschat)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% resterend</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Werkruimte %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Ongesorteerd</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Ontwikkeling</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Spellen</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafisch</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Netwerk</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Kantoor</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Wetenschap</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Instellingen</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Systeem</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Hulpmiddel</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Ongesorteerd</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts
index e3ebe0a6..b1c10e26 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Pulpit</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Zaniechaj</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (Podłączony)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 Szacowane)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% Pozostało</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Przestrzeń robocza %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Nieuporządkowane</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Narzędzia programistów</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Edukacja</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Gry</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafika</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Sieć</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Biuro</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Nauka</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Ustawienia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">System</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Narzędzia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Nieuporządkowane</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts
index 0321a6b1..92b97b71 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished">Área de Trabalho</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Cancelar</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished">Espaço de trabalho %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Sem ordem</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimídia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Desenvolvimento</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Educação</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Jogos</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Gráficos</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Rede</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Escritório</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Ciência</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Definições</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistema</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Utilitário</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Vinho</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Sem ordem</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts
index 0fd7d193..130213bb 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Área de trabalho</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Cancelar</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (Plugado)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 Estimado)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% Restantes</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Espaço de trabalho %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Não organizados</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimídia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Desenvolvimento</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Educação</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Jogos</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Gráficos</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Escritório</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Configurações</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistema</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts
index 2f4b4072..45e3a5cd 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Рабочий стол</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Отмена</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (подключенный)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 расчетно)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% осталось</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Рабочая Область %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Несортированный</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Мультимедиа</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Разработка</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Образование</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Игры</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Графика</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Сети</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Офис</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Наука</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Система</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Инструменты</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Вино</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts
index 907717e2..bb2b4d44 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished">Pracovná plocha</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Zrušiť</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (Nabitia)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 odhadovaný)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>Zostáva %1%</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Pracovná plocha %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Nezoradené</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimédiá</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Vývoj</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Vzdelávanie</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Hry</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafika</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Sieť</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Kancelária</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Veda</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Nastavenie</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Systém</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Nástroje</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Nezoradené</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts
index 637f7436..4a860781 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Večpredstavnost</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Razvoj</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Izobraževanje</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Igre</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Omrežje</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Znanost</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Nastavitve</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts
index ecf6aa32..b97f822b 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Skrivbord</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Avbryt</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (Inkopplad)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 Beräknad)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% återstår</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Arbetsyta %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Osorterade</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Utveckling</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Utbildning</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Spel</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafik</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Nätverk</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Kontorsprogram</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Vetenskap</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Inställningar</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">System</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Verktyg</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Osorterade</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts
index f3e6147d..1741c455 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Masaüstü</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">İptal</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (Prize Takılı)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (Tahmini %2)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% Kaldı</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Çalışma alanı %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Sınıflandırılmamış</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedya</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Geliştirme</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Eğitim</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Oyunlar</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafik</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Ağ</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Ofis</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Bilim</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Ayarlar</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistem</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Gereç</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished">Sınıflandırılmamış</translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts
index e73fe905..d88a1b33 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>Робочий стіл</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">Скасувати</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (Підключено)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (%2 розрахунково)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>%1% Залишилось</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>Робочий простір %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>Невідсортований</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Мультимедіа</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Розробка</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Освіта</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">Ігри</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Графіка</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Мережа</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Офіс</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Наука</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Налаштування</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Система</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">Утиліти</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished">Wine</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts
index cf6f658b..d1c65849 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation>桌面</translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished">取消</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation>%1% (已插电)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation>%1% (估计 %2)</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation>剩余 %1%</translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation>工作区 %1/%2</translation>
</message>
@@ -1759,4 +1764,72 @@
<translation>未排序的</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">多媒体</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">开发</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">教育</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished">游戏</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">图像</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">网络</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">办公</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">科学</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">设置</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">系统</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished">工具</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts
index 8ca71d5a..d48278b9 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts
@@ -833,6 +833,11 @@
<context>
<name>LDesktopSwitcher</name>
<message>
+ <location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="19"/>
+ <source>Workspace 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="135"/>
<location filename="../panel-plugins/desktopswitcher/LDesktopSwitcher.cpp" line="139"/>
<source>Workspace %1</source>
@@ -850,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="163"/>
- <location filename="../LSession.cpp" line="346"/>
+ <location filename="../LSession.cpp" line="164"/>
+ <location filename="../LSession.cpp" line="347"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1474,24 +1479,24 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="501"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="475"/>
<source>%1% (Plugged In)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="505"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="479"/>
<source>%1% (%2 Estimated)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="506"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="480"/>
<source>%1% Remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="522"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="681"/>
- <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="692"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="496"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="655"/>
+ <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="666"/>
<source>Workspace %1/%2</source>
<translation type="unfinished"></translation>
</message>
@@ -1759,4 +1764,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-desktop/main.cpp b/src-qt5/core/lumina-desktop/main.cpp
index 6017cad7..b2bfa9be 100644
--- a/src-qt5/core/lumina-desktop/main.cpp
+++ b/src-qt5/core/lumina-desktop/main.cpp
@@ -93,14 +93,14 @@ int main(int argc, char ** argv)
if(DEBUG){ timer = new QTime(); timer->start(); }
//Setup Log File
//qInstallMessageHandler(MessageOutput);
- if(DEBUG){ qDebug() << "Theme Init:" << timer->elapsed(); }
- LuminaThemeEngine theme(&a);
- QObject::connect(&theme, SIGNAL(updateIcons()), &a, SLOT(reloadIconTheme()) );
+ //if(DEBUG){ qDebug() << "Theme Init:" << timer->elapsed(); }
+ //LuminaThemeEngine theme(&a);
+ //QObject::connect(&theme, SIGNAL(updateIcons()), &a, SLOT(reloadIconTheme()) );
//if(DEBUG){ qDebug() << "Load Locale:" << timer->elapsed(); }
//LUtils::LoadTranslation(&a, "lumina-desktop");
if(DEBUG){ qDebug() << "Session Setup:" << timer->elapsed(); }
a.setupSession();
- theme.refresh();
+ //theme.refresh();
if(DEBUG){ qDebug() << "Exec Time:" << timer->elapsed(); delete timer;}
int retCode = a.exec();
//qDebug() << "Stopping the window manager";
diff --git a/src-qt5/core/lumina-desktop/panel-plugins/applauncher/AppLaunchButton.h b/src-qt5/core/lumina-desktop/panel-plugins/applauncher/AppLaunchButton.h
index 3aa3c7ad..f146df66 100644
--- a/src-qt5/core/lumina-desktop/panel-plugins/applauncher/AppLaunchButton.h
+++ b/src-qt5/core/lumina-desktop/panel-plugins/applauncher/AppLaunchButton.h
@@ -24,11 +24,11 @@
// PANEL PLUGIN BUTTON
class AppLaunchButtonPlugin : public LPPlugin{
Q_OBJECT
-
+
public:
AppLaunchButtonPlugin(QWidget *parent = 0, QString id = "applauncher", bool horizontal=true);
~AppLaunchButtonPlugin();
-
+
private:
QToolButton *button;
QString appfile;
@@ -50,14 +50,18 @@ public slots:
this->layout()->update();
updateButtonVisuals();
}
-
- void LocaleChange(){
+ void LocaleChange(){
updateButtonVisuals();
}
-
void ThemeChange(){
updateButtonVisuals();
}
+protected:
+ void changeEvent(QEvent *ev){
+ LPPlugin::changeEvent(ev);
+ QEvent::Type tmp = ev->type();
+ if(tmp == QEvent::StyleChange || tmp==QEvent::ThemeChange || tmp==QEvent::LanguageChange || tmp==QEvent::LocaleChange){ updateButtonVisuals(); }
+ }
};
-#endif \ No newline at end of file
+#endif
diff --git a/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.cpp b/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.cpp
index be5b8488..cae73d13 100644
--- a/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.cpp
+++ b/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.cpp
@@ -77,7 +77,7 @@ void LBattery::updateBattery(bool force){
break;
}
if(icon<iconOld && icon==0){
- //Play some audio warning chime when
+ //Play some audio warning chime when
QString sfile = LSession::handle()->sessionSettings()->value("audiofiles/batterylow", LOS::LuminaShare()+"low-battery.ogg").toString();
LSession::handle()->playAudioFile(sfile);
}
diff --git a/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.h b/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.h
index 29562d5d..d14cfc53 100644
--- a/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.h
+++ b/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.h
@@ -25,12 +25,12 @@ class LBattery : public LPPlugin{
public:
LBattery(QWidget *parent = 0, QString id = "battery", bool horizontal=true);
~LBattery();
-
+
private:
QTimer *timer;
QLabel *label;
int iconOld;
-
+
private slots:
void updateBattery(bool force = false);
QString getRemainingTime();
@@ -39,7 +39,7 @@ public slots:
void LocaleChange(){
updateBattery(true);
}
-
+
void OrientationChange(){
if(this->layout()->direction()==QBoxLayout::LeftToRight){
label->setFixedSize( QSize(this->height(), this->height()) );
@@ -48,6 +48,15 @@ public slots:
}
updateBattery(true); //force icon refresh
}
+protected:
+ void changeEvent(QEvent *ev){
+ LPPlugin::changeEvent(ev);
+ QEvent::Type tmp = ev->type();
+ if(tmp==QEvent::ThemeChange || tmp==QEvent::LanguageChange || tmp==QEvent::LocaleChange){
+ updateBattery(true);
+ }
+ }
+
};
#endif
diff --git a/src-qt5/core/lumina-desktop/panel-plugins/desktopswitcher/LDesktopSwitcher.cpp b/src-qt5/core/lumina-desktop/panel-plugins/desktopswitcher/LDesktopSwitcher.cpp
index 8e0a9d28..e6e89075 100644
--- a/src-qt5/core/lumina-desktop/panel-plugins/desktopswitcher/LDesktopSwitcher.cpp
+++ b/src-qt5/core/lumina-desktop/panel-plugins/desktopswitcher/LDesktopSwitcher.cpp
@@ -16,7 +16,7 @@ LDesktopSwitcher::LDesktopSwitcher(QWidget *parent, QString id, bool horizontal)
label->setAutoRaise(true);
label->setToolButtonStyle(Qt::ToolButtonIconOnly);
label->setIcon( LXDG::findIcon("format-view-carousel", "preferences-desktop-display") );
- label->setToolTip(QString("Workspace 1"));
+ label->setToolTip(QString(tr("Workspace 1")));
connect(label, SIGNAL(clicked()), this, SLOT(openMenu()));
menu = new QMenu(this);
connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(menuActionTriggered(QAction*)));
diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp
index 1992db0f..e8df8390 100644
--- a/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp
+++ b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp
@@ -35,15 +35,15 @@ StartMenu::StartMenu(QWidget *parent) : QWidget(parent), ui(new Ui::StartMenu){
}
StartMenu::~StartMenu(){
-
+
}
void StartMenu::UpdateAll(){
//Update all the icons/text on all the pages
-
+
// Update Text
ui->retranslateUi(this);
-
+
//Update Icons
ui->tool_goto_apps->setIcon(LXDG::findIcon("system-run",""));
ui->tool_goto_settings->setIcon(LXDG::findIcon("preferences-system",""));
@@ -53,7 +53,7 @@ void StartMenu::UpdateAll(){
ui->tool_goto_logout->setIcon(LXDG::findIcon("system-log-out",""));
ui->tool_back->setIcon(LXDG::findIcon("go-previous",""));
ui->tool_launch_deskinfo->setIcon(LXDG::findIcon("system-help",""));
-
+
ui->tool_launch_mixer->setIcon( LXDG::findIcon("preferences-desktop-sound","") );
ui->label_bright_icon->setPixmap( LXDG::findIcon("preferences-desktop-brightness","").pixmap(ui->tool_goto_apps->iconSize()) );
ui->label_locale_icon->setPixmap( LXDG::findIcon("preferences-desktop-locale","").pixmap(ui->tool_goto_apps->iconSize()) );
@@ -63,7 +63,7 @@ void StartMenu::UpdateAll(){
ui->tool_restart->setIcon(LXDG::findIcon("system-reboot",""));
ui->tool_shutdown->setIcon(LXDG::findIcon("system-shutdown",""));
ui->tool_suspend->setIcon(LXDG::findIcon("system-suspend",""));
-
+
//Update Visibility of system/session/OS options
// -- Control Panel
QString tmp = LOS::ControlPanelShortcut();
@@ -156,11 +156,11 @@ void StartMenu::UpdateQuickLaunch(QString path, bool keep){
// ==========================
/*void StartMenu::deleteChildren(QWidget *obj){
if(obj->layout()==0){
- for(int i=0; i<obj->children().count(); i++){
- obj->children().at(i)->deleteLater();
+ for(int i=0; i<obj->children().count(); i++){
+ obj->children().at(i)->deleteLater();
}
}else{
-
+
}
}*/
@@ -174,7 +174,7 @@ void StartMenu::ClearScrollArea(QScrollArea *area){
if(area == ui->scroll_favs){
area->takeWidget()->deleteLater();
}
- if(area->widget()==0){
+ if(area->widget()==0){
area->setWidget( new QWidget(area) ); //create a new widget in the scroll area
}
if(area->widget()->layout()==0){
@@ -203,7 +203,7 @@ void StartMenu::SortScrollArea(QScrollArea *area){
for(int i=0; i<lay->count(); i++){
items << lay->itemAt(i)->widget()->whatsThis();
}
-
+
items.sort();
//qDebug() << " - Sorted Items:" << items;
for(int i=0; i<items.length(); i++){
@@ -223,10 +223,10 @@ void StartMenu::SortScrollArea(QScrollArea *area){
void StartMenu::do_search(QString search, bool force){
search = search.simplified(); //remove unneccesary whitespace
- if(search == CSearch && !force){
+ if(search == CSearch && !force){
//nothing new - just ensure the page is visible
if(ui->stackedWidget->currentWidget()!=ui->page_search ){ ui->stackedWidget->setCurrentWidget(ui->page_search); }
- return;
+ return;
}else if(search.isEmpty()){
CSearch.clear();
if(ui->stackedWidget->currentWidget()==ui->page_search ){ on_tool_back_clicked(); }
@@ -234,7 +234,7 @@ void StartMenu::do_search(QString search, bool force){
}
//Got a search term - check it
CSearch = search; //save this for comparison later
- qDebug() << "Search for term:" << search;
+ //qDebug() << "Search for term:" << search;
ClearScrollArea(ui->scroll_search);
topsearch.clear();
//Now find any items which match the search
@@ -275,7 +275,7 @@ void StartMenu::do_search(QString search, bool force){
connect(it, SIGNAL(RemovedShortcut()), this, SLOT(UpdateFavs()) );
connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) );
connect(it, SIGNAL(toggleQuickLaunch(QString, bool)), this, SLOT(UpdateQuickLaunch(QString, bool)) );
- if(i%3==0){
+ if(i%3==0){
QApplication::processEvents();
if(searchTimer->isActive()){ return; } //search changed - go ahead and stop here
}
@@ -305,13 +305,13 @@ bool StartMenu::promptAboutUpdates(bool &skip){
// PRIVATE SLOTS
// ========================
void StartMenu::LaunchItem(QString path, bool fix){
- if(path.startsWith("chcat::::")){
+ if(path.startsWith("chcat::::")){
ChangeCategory(path.section("::::",1,50));
return;
}
- qDebug() << "Launching Item:" << path << fix;
+ //qDebug() << "Launching Item:" << path << fix;
if(!path.isEmpty()){
- qDebug() << "Launch Application:" << path;
+ //qDebug() << "Launch Application:" << path;
if( fix && !path.startsWith("lumina-open") ){ LSession::LaunchApplication("lumina-open \""+path+"\""); }
else{ LSession::LaunchApplication(path); }
emit CloseMenu(); //so the menu container will close
@@ -355,7 +355,7 @@ void StartMenu::UpdateApps(){
connect(it, SIGNAL(toggleQuickLaunch(QString, bool)), this, SLOT(UpdateQuickLaunch(QString, bool)) );
}
}
-
+
}else if(ui->check_apps_showcats->checkState() == Qt::Checked){
//qDebug() << " - Checked";
//Only show categories to start with - and have the user click-into a cat to see apps
@@ -378,7 +378,7 @@ void StartMenu::UpdateApps(){
ui->scroll_apps->widget()->layout()->addWidget(it);
connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) );
//Show apps for this cat
- QList<XDGDesktop*> apps = LSession::handle()->applicationMenu()->currentAppHash()->value(CCat);
+ QList<XDGDesktop*> apps = LSession::handle()->applicationMenu()->currentAppHash()->value(CCat);
for(int i=0; i<apps.length(); i++){
//qDebug() << " - App:" << apps[i].name;
ItemWidget *it = new ItemWidget(ui->scroll_apps->widget(), apps[i] );
@@ -390,11 +390,11 @@ void StartMenu::UpdateApps(){
connect(it, SIGNAL(toggleQuickLaunch(QString, bool)), this, SLOT(UpdateQuickLaunch(QString, bool)) );
}
}
-
+
}else{
//qDebug() << " - Not Checked";
//No categories at all - just alphabetize all the apps
- QList<XDGDesktop*> apps = LSession::handle()->applicationMenu()->currentAppHash()->value("All");
+ QList<XDGDesktop*> apps = LSession::handle()->applicationMenu()->currentAppHash()->value("All");
CCat.clear();
//Now add all the apps for this category
for(int i=0; i<apps.length(); i++){
@@ -407,8 +407,7 @@ void StartMenu::UpdateApps(){
connect(it, SIGNAL(toggleQuickLaunch(QString, bool)), this, SLOT(UpdateQuickLaunch(QString, bool)) );
}
}
-
-
+
}
void StartMenu::UpdateFavs(){
@@ -427,31 +426,7 @@ void StartMenu::UpdateFavs(){
else{ tmp = rest; } //everything left over
if(type==1){
SortScrollArea(ui->scroll_favs);
- //Need to run a special routine for sorting the apps (already in the widget)
- //qDebug() << "Sort App Widgets...";
- // Since each app actually might have a different name listed within the file
- /*QLayout *lay = ui->scroll_favs->widget()->layout();
- QStringList items;
- for(int i=0; i<lay->count(); i++){
- items << lay->itemAt(i)->widget()->whatsThis().toLower();
- }
-
- items.sort();
- // qDebug() << " - Sorted Items:" << items;
- for(int i=0; i<items.length(); i++){
- if(items[i].isEmpty()){ continue; }
- //QLayouts are weird in that they can only add items to the end - need to re-insert almost every item
- for(int j=0; j<lay->count(); j++){
- //Find this item
- if(lay->itemAt(j)->widget()->whatsThis().toLower()==items[i]){
- //Found it - now move it if necessary
- //qDebug() << "Found Item:" << items[i] << i << j;
- lay->addItem( lay->takeAt(j) );
- break;
- }
- }
- }*/
-
+
}//end of special app sorting routine
tmp.sort(); //Sort alphabetically by name (dirs/files)
for(int i=0; i<tmp.length(); i++){
@@ -472,7 +447,6 @@ void StartMenu::UpdateFavs(){
connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) );
connect(it, SIGNAL(toggleQuickLaunch(QString, bool)), this, SLOT(UpdateQuickLaunch(QString, bool)) );
}
- //QApplication::processEvents();
} //end loop over types
ui->scroll_favs->update();
//qDebug() << "End updateFavs";
@@ -541,7 +515,7 @@ void StartMenu::on_stackedWidget_currentChanged(int val){
}
ui->frame_leave_suspend->setVisible( LOS::systemCanSuspend() );
}
-
+
}
void StartMenu::catViewChanged(){
@@ -567,7 +541,7 @@ void StartMenu::on_tool_goto_apps_clicked(){
}
void StartMenu::on_tool_goto_settings_clicked(){
- ui->stackedWidget->setCurrentWidget(ui->page_settings);
+ ui->stackedWidget->setCurrentWidget(ui->page_settings);
}
void StartMenu::on_tool_goto_logout_clicked(){
@@ -585,7 +559,7 @@ void StartMenu::on_tool_launch_controlpanel_clicked(){
}
void StartMenu::on_tool_launch_fm_clicked(){
- LaunchItem(QDir::homePath());
+ LaunchItem(QDir::homePath());
}
void StartMenu::on_tool_launch_store_clicked(){
diff --git a/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskButton.cpp b/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskButton.cpp
index ab4e786f..8f867261 100644
--- a/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskButton.cpp
+++ b/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskButton.cpp
@@ -30,7 +30,7 @@ LTaskButton::LTaskButton(QWidget *parent, bool smallDisplay) : LTBWidget(parent)
}
LTaskButton::~LTaskButton(){
-
+
}
//===========
@@ -81,11 +81,12 @@ LWinInfo LTaskButton::currentWindow(){
//=============
// PUBLIC SLOTS
//=============
+
void LTaskButton::UpdateButton(){
if(winMenu->isVisible()){ return; } //skip this if the window menu is currently visible for now
bool statusOnly = (WINLIST.length() == LWINLIST.length());
LWINLIST = WINLIST;
-
+
winMenu->clear();
LXCB::WINDOWVISIBILITY showstate = LXCB::IGNORE;
for(int i=0; i<WINLIST.length(); i++){
@@ -98,7 +99,7 @@ void LTaskButton::UpdateButton(){
//Update the button visuals from the first window
this->setIcon(WINLIST[i].icon(noicon));
cname = WINLIST[i].Class();
- if(cname.isEmpty()){
+ if(cname.isEmpty()){
//Special case (chrome/chromium does not register *any* information with X except window title)
cname = WINLIST[i].text();
if(cname.contains(" - ")){ cname = cname.section(" - ",-1); }
diff --git a/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskButton.h b/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskButton.h
index 6b171c6a..ff551998 100644
--- a/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskButton.h
+++ b/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskButton.h
@@ -15,6 +15,7 @@
#include <QMenu>
#include <QEvent>
#include <QAction>
+#include <QTimer>
// libLumina includes
#include <LuminaXDG.h>
@@ -29,7 +30,7 @@ class LTaskButton : public LTBWidget{
public:
LTaskButton(QWidget *parent=0, bool smallDisplay = true);
~LTaskButton();
-
+
//Window Information
QList<WId> windows();
QString classname();
@@ -56,6 +57,7 @@ public slots:
void UpdateMenus(); //re-create the menus (text + icons)
private slots:
+
void buttonClicked();
void closeWindow(); //send the signal to close a window
void maximizeWindow(); //send the signal to maximize/restore a window
@@ -66,7 +68,14 @@ private slots:
void triggerWindow(); //change b/w visible and invisible
void winClicked(QAction*);
void openActionMenu();
-
+protected:
+ void changeEvent(QEvent *ev){
+ LTBWidget::changeEvent(ev);
+ QEvent::Type tmp = ev->type();
+ if(tmp==QEvent::ThemeChange || tmp==QEvent::LanguageChange || tmp==QEvent::LocaleChange){
+ QTimer::singleShot(qrand()%100+500, this, SLOT(UpdateButton()) );
+ }
+ }
signals:
void MenuClosed();
};
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_af.ts b/src-qt5/core/lumina-info/i18n/lumina-info_af.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_af.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_af.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_ar.ts b/src-qt5/core/lumina-info/i18n/lumina-info_ar.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_ar.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_ar.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_az.ts b/src-qt5/core/lumina-info/i18n/lumina-info_az.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_az.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_az.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_bg.ts b/src-qt5/core/lumina-info/i18n/lumina-info_bg.ts
index 2d5316bf..454faad5 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_bg.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_bg.ts
@@ -94,4 +94,72 @@
<translation>Затваряне</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_bn.ts b/src-qt5/core/lumina-info/i18n/lumina-info_bn.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_bn.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_bn.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_bs.ts b/src-qt5/core/lumina-info/i18n/lumina-info_bs.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_bs.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_bs.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_ca.ts b/src-qt5/core/lumina-info/i18n/lumina-info_ca.ts
index 9d0042d9..03baf485 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_ca.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_ca.ts
@@ -94,4 +94,72 @@
<translation>Tanca</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_cs.ts b/src-qt5/core/lumina-info/i18n/lumina-info_cs.ts
index 071addb4..cb516383 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_cs.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_cs.ts
@@ -94,4 +94,72 @@
<translation>Zavřít</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_cy.ts b/src-qt5/core/lumina-info/i18n/lumina-info_cy.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_cy.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_cy.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_da.ts b/src-qt5/core/lumina-info/i18n/lumina-info_da.ts
index fe539caf..12750d57 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_da.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_da.ts
@@ -94,4 +94,72 @@
<translation>Luk</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_de.ts b/src-qt5/core/lumina-info/i18n/lumina-info_de.ts
index e3b7aa45..d4f3eb6c 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_de.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_de.ts
@@ -94,4 +94,72 @@
<translation>Schließen</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_el.ts b/src-qt5/core/lumina-info/i18n/lumina-info_el.ts
index 45d73ebd..bf7645f3 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_el.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_el.ts
@@ -94,4 +94,72 @@
<translation>Κλείσιμο</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_en_AU.ts b/src-qt5/core/lumina-info/i18n/lumina-info_en_AU.ts
index 4f3f0706..ec2a3987 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_en_AU.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_en_AU.ts
@@ -94,4 +94,72 @@
<translation>Close</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_en_GB.ts b/src-qt5/core/lumina-info/i18n/lumina-info_en_GB.ts
index d747c640..23414b75 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_en_GB.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_en_GB.ts
@@ -94,4 +94,72 @@
<translation>Close</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_en_ZA.ts b/src-qt5/core/lumina-info/i18n/lumina-info_en_ZA.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_en_ZA.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_en_ZA.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_es.ts b/src-qt5/core/lumina-info/i18n/lumina-info_es.ts
index bf689483..21806d0b 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_es.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_es.ts
@@ -94,4 +94,72 @@
<translation>Cerrar</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_et.ts b/src-qt5/core/lumina-info/i18n/lumina-info_et.ts
index f31298aa..90c031e5 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_et.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_et.ts
@@ -94,4 +94,72 @@
<translation>Sulge</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_eu.ts b/src-qt5/core/lumina-info/i18n/lumina-info_eu.ts
index 26b1855c..44d0427e 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_eu.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_eu.ts
@@ -94,4 +94,72 @@
<translation>Itxi</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_fa.ts b/src-qt5/core/lumina-info/i18n/lumina-info_fa.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_fa.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_fa.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_fi.ts b/src-qt5/core/lumina-info/i18n/lumina-info_fi.ts
index ba9465df..812f378f 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_fi.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_fi.ts
@@ -94,4 +94,72 @@
<translation>Sulje</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_fr.ts b/src-qt5/core/lumina-info/i18n/lumina-info_fr.ts
index 09cd8502..47710462 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_fr.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_fr.ts
@@ -94,4 +94,72 @@
<translation>Fermer</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_fr_CA.ts b/src-qt5/core/lumina-info/i18n/lumina-info_fr_CA.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_fr_CA.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_fr_CA.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_gl.ts b/src-qt5/core/lumina-info/i18n/lumina-info_gl.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_gl.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_gl.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_he.ts b/src-qt5/core/lumina-info/i18n/lumina-info_he.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_he.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_he.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_hi.ts b/src-qt5/core/lumina-info/i18n/lumina-info_hi.ts
index 1d53b1ea..9aaa1aea 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_hi.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_hi.ts
@@ -94,4 +94,72 @@
<translation>बंद</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_hr.ts b/src-qt5/core/lumina-info/i18n/lumina-info_hr.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_hr.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_hr.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_hu.ts b/src-qt5/core/lumina-info/i18n/lumina-info_hu.ts
index 645c4060..a618850d 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_hu.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_hu.ts
@@ -94,4 +94,72 @@
<translation>Bezárás</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_id.ts b/src-qt5/core/lumina-info/i18n/lumina-info_id.ts
index 16440245..3da2f670 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_id.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_id.ts
@@ -94,4 +94,72 @@
<translation>Tutup</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_is.ts b/src-qt5/core/lumina-info/i18n/lumina-info_is.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_is.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_is.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_it.ts b/src-qt5/core/lumina-info/i18n/lumina-info_it.ts
index 3ecfd8af..befeb735 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_it.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_it.ts
@@ -94,4 +94,72 @@
<translation>Chiudi</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_ja.ts b/src-qt5/core/lumina-info/i18n/lumina-info_ja.ts
index 7c38fb6e..e3e2bbe6 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_ja.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_ja.ts
@@ -95,4 +95,72 @@
<translation>閉じる</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_ka.ts b/src-qt5/core/lumina-info/i18n/lumina-info_ka.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_ka.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_ka.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_ko.ts b/src-qt5/core/lumina-info/i18n/lumina-info_ko.ts
index a6800f5c..1ef0a61c 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_ko.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_ko.ts
@@ -94,4 +94,72 @@
<translation>닫기</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_lt.ts b/src-qt5/core/lumina-info/i18n/lumina-info_lt.ts
index f962f91d..bceaa49d 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_lt.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_lt.ts
@@ -94,4 +94,72 @@
<translation>Užverti</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_lv.ts b/src-qt5/core/lumina-info/i18n/lumina-info_lv.ts
index f38f9c01..eb089eef 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_lv.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_lv.ts
@@ -94,4 +94,72 @@
<translation>Aizvērt</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_mk.ts b/src-qt5/core/lumina-info/i18n/lumina-info_mk.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_mk.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_mk.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_mn.ts b/src-qt5/core/lumina-info/i18n/lumina-info_mn.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_mn.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_mn.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_ms.ts b/src-qt5/core/lumina-info/i18n/lumina-info_ms.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_ms.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_ms.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_mt.ts b/src-qt5/core/lumina-info/i18n/lumina-info_mt.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_mt.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_mt.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_nb.ts b/src-qt5/core/lumina-info/i18n/lumina-info_nb.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_nb.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_nb.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_nl.ts b/src-qt5/core/lumina-info/i18n/lumina-info_nl.ts
index 2c6e3180..d3608ebe 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_nl.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_nl.ts
@@ -94,4 +94,72 @@
<translation>Sluiten</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_pa.ts b/src-qt5/core/lumina-info/i18n/lumina-info_pa.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_pa.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_pa.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_pl.ts b/src-qt5/core/lumina-info/i18n/lumina-info_pl.ts
index 03133ac7..a563013e 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_pl.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_pl.ts
@@ -94,4 +94,72 @@
<translation>Zamknij</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_pt.ts b/src-qt5/core/lumina-info/i18n/lumina-info_pt.ts
index 36ef1867..1fdbe6a1 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_pt.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_pt.ts
@@ -94,4 +94,72 @@
<translation>Fechar</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_pt_BR.ts b/src-qt5/core/lumina-info/i18n/lumina-info_pt_BR.ts
index 03e47e81..6e9f6e1c 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_pt_BR.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_pt_BR.ts
@@ -94,4 +94,72 @@
<translation>Fechar</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_ro.ts b/src-qt5/core/lumina-info/i18n/lumina-info_ro.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_ro.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_ro.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_ru.ts b/src-qt5/core/lumina-info/i18n/lumina-info_ru.ts
index f86f8764..fca1cd8e 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_ru.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_ru.ts
@@ -94,4 +94,72 @@
<translation>Закрыть</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_sk.ts b/src-qt5/core/lumina-info/i18n/lumina-info_sk.ts
index d58a7bf0..44e2f1df 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_sk.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_sk.ts
@@ -94,4 +94,72 @@
<translation>Zatvoriť</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_sl.ts b/src-qt5/core/lumina-info/i18n/lumina-info_sl.ts
index 573d7cd2..dfb3708c 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_sl.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_sl.ts
@@ -94,4 +94,72 @@
<translation>Zapri</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_sr.ts b/src-qt5/core/lumina-info/i18n/lumina-info_sr.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_sr.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_sr.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_sv.ts b/src-qt5/core/lumina-info/i18n/lumina-info_sv.ts
index 2469b9d3..06e91efa 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_sv.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_sv.ts
@@ -94,4 +94,72 @@
<translation>Stäng</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_sw.ts b/src-qt5/core/lumina-info/i18n/lumina-info_sw.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_sw.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_sw.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_ta.ts b/src-qt5/core/lumina-info/i18n/lumina-info_ta.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_ta.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_ta.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_tg.ts b/src-qt5/core/lumina-info/i18n/lumina-info_tg.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_tg.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_tg.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_th.ts b/src-qt5/core/lumina-info/i18n/lumina-info_th.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_th.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_th.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_tr.ts b/src-qt5/core/lumina-info/i18n/lumina-info_tr.ts
index 2c7831ae..b520af3d 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_tr.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_tr.ts
@@ -94,4 +94,72 @@
<translation>Kapat</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_uk.ts b/src-qt5/core/lumina-info/i18n/lumina-info_uk.ts
index a61ed654..93acfa2f 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_uk.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_uk.ts
@@ -94,4 +94,72 @@
<translation>Закрити</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_uz.ts b/src-qt5/core/lumina-info/i18n/lumina-info_uz.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_uz.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_uz.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_vi.ts b/src-qt5/core/lumina-info/i18n/lumina-info_vi.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_vi.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_vi.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_zh_CN.ts b/src-qt5/core/lumina-info/i18n/lumina-info_zh_CN.ts
index 289c18db..d24b2b3e 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_zh_CN.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_zh_CN.ts
@@ -94,4 +94,72 @@
<translation>关闭</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_zh_HK.ts b/src-qt5/core/lumina-info/i18n/lumina-info_zh_HK.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_zh_HK.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_zh_HK.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_zh_TW.ts b/src-qt5/core/lumina-info/i18n/lumina-info_zh_TW.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_zh_TW.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_zh_TW.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_zu.ts b/src-qt5/core/lumina-info/i18n/lumina-info_zu.ts
index 70577011..bf95d1cb 100644
--- a/src-qt5/core/lumina-info/i18n/lumina-info_zu.ts
+++ b/src-qt5/core/lumina-info/i18n/lumina-info_zu.ts
@@ -94,4 +94,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_af.ts b/src-qt5/core/lumina-open/i18n/lumina-open_af.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_af.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_af.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ar.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ar.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ar.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ar.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_az.ts b/src-qt5/core/lumina-open/i18n/lumina-open_az.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_az.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_az.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_bg.ts b/src-qt5/core/lumina-open/i18n/lumina-open_bg.ts
index 42817c9f..6504b9bb 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_bg.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_bg.ts
@@ -209,4 +209,72 @@
<translation>Възникна грешка в програмата и трябваше да бъде затворена:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Мултимедия</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Разработка</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Образование</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Изображения</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Мрежа</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Офис</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Наука</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Настройки</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Система</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_bn.ts b/src-qt5/core/lumina-open/i18n/lumina-open_bn.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_bn.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_bn.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_bs.ts b/src-qt5/core/lumina-open/i18n/lumina-open_bs.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_bs.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_bs.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ca.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ca.ts
index a5eaf608..222884ed 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ca.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ca.ts
@@ -209,4 +209,72 @@
<translation>L&apos;aplicació següent ha tingut un error i s&apos;ha hagut de tancar:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimèdia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Desenvolupament</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Educació</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Gràfics</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Xarxa</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Oficina</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Ciència</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Configuració</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistema</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_cs.ts b/src-qt5/core/lumina-open/i18n/lumina-open_cs.ts
index 3123825f..15cbfa0f 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_cs.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_cs.ts
@@ -209,4 +209,72 @@
<translation>V následující aplikaci došlo k chyba a bude proto ukončena:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimédia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Vývoj</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Výuka</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafika</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Síť</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Kancelář</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Věda</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Nastavení</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Systém</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_cy.ts b/src-qt5/core/lumina-open/i18n/lumina-open_cy.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_cy.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_cy.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_da.ts b/src-qt5/core/lumina-open/i18n/lumina-open_da.ts
index 695e6f57..340bbfc5 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_da.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_da.ts
@@ -209,4 +209,72 @@
<translation>Det følgende program oplevede en fejl og blev nødt til at afslutte:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedie</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Udvikling</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Uddannelse</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafik</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Netværk</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Kontor</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Videnskab</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Indstillinger</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">System</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_de.ts b/src-qt5/core/lumina-open/i18n/lumina-open_de.ts
index 27a43260..02b475dc 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_de.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_de.ts
@@ -209,4 +209,72 @@
<translation>Bei folgender Anwendung ist ein Fehler aufgetreten und sie wurde beendet:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Entwicklung</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Ausbildung</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafik</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Netzwerk</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Büro</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Wissenschaft</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Einstellungen</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">System</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_el.ts b/src-qt5/core/lumina-open/i18n/lumina-open_el.ts
index 7ce33bc2..f7344eb9 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_el.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_el.ts
@@ -209,4 +209,72 @@
<translation>Η παρακάτω εφαρμογή αντιμετώπισε ένα σφάλμα και πρέπει να τερματιστεί:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Πολυμέσα</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Ανάπτυξη</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Εκπαίδευση</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Γραφικά</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Δίκτυο</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Σουΐτα Γραφείου</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Επιστήμη</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Ρυθμίσεις</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Σύστημα</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_en_AU.ts b/src-qt5/core/lumina-open/i18n/lumina-open_en_AU.ts
index 535b6209..f2675e28 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_en_AU.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_en_AU.ts
@@ -209,4 +209,72 @@
<translation>The following application experienced an error and needed to close:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Development</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Education</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Graphics</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Network</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Office</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Science</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Settings</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">System</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_en_GB.ts b/src-qt5/core/lumina-open/i18n/lumina-open_en_GB.ts
index 91d418fa..0d6dcf0b 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_en_GB.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_en_GB.ts
@@ -209,4 +209,72 @@
<translation>The following application experienced an error and needed to close:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Development</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Education</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Graphics</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Network</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Office</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Science</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Settings</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">System</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_en_ZA.ts b/src-qt5/core/lumina-open/i18n/lumina-open_en_ZA.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_en_ZA.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_en_ZA.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_es.ts b/src-qt5/core/lumina-open/i18n/lumina-open_es.ts
index 91f106aa..b8d7d446 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_es.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_es.ts
@@ -209,4 +209,72 @@
<translation>La siguiente aplicación presentó un error y necesita cerrarse:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Desarrollo</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Educación</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Gráficos</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Red</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Oficina</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Ciencia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Configuración</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistema</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_et.ts b/src-qt5/core/lumina-open/i18n/lumina-open_et.ts
index 3c8fee7e..df9c029b 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_et.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_et.ts
@@ -209,4 +209,72 @@
<translation>See rakendus sulgus, kuna esines viga:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimeedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Arendus</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Haridus</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Graafika</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Võrk</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Kontor</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Teadus</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Sätted</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Süsteem</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_eu.ts b/src-qt5/core/lumina-open/i18n/lumina-open_eu.ts
index de44e1fb..1cdbc65f 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_eu.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_eu.ts
@@ -209,4 +209,72 @@
<translation>Hurrengo aplikazioak akats bat izan du eta itxi behar da:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Garapena</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Hezkuntza</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafikoak</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Sarea</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Bulegoa</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Zientzia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Ezarpenak</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistema</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_fa.ts b/src-qt5/core/lumina-open/i18n/lumina-open_fa.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_fa.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_fa.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_fi.ts b/src-qt5/core/lumina-open/i18n/lumina-open_fi.ts
index acfe5015..6a09c31b 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_fi.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_fi.ts
@@ -209,4 +209,72 @@
<translation>Seuraavat sovellukset kohtasivat virheen ja ne täytyy sulkea:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Ohjelmakehitys</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Kasvatus</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafiikka</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Verkko</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Toimisto</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Tiede</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Asetukset</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Järjestelmä</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_fr.ts b/src-qt5/core/lumina-open/i18n/lumina-open_fr.ts
index 9230eab7..6c950a8f 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_fr.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_fr.ts
@@ -26,7 +26,7 @@
<message>
<location filename="../LFileDialog.ui" line="131"/>
<source>Binary Location</source>
- <translation>Emplacement de l'Exécutable</translation>
+ <translation>Emplacement de l&apos;Exécutable</translation>
</message>
<message>
<location filename="../LFileDialog.ui" line="138"/>
@@ -156,7 +156,7 @@
<location filename="../main.cpp" line="205"/>
<location filename="../main.cpp" line="214"/>
<source>Screen Brightness %1%</source>
- <translation>Luminosité de l'Écran %1%</translation>
+ <translation>Luminosité de l&apos;Écran %1%</translation>
</message>
<message>
<location filename="../main.cpp" line="246"/>
@@ -176,7 +176,7 @@
<message>
<location filename="../main.cpp" line="291"/>
<source>URL shortcut is missing the URL: %1</source>
- <translation>L'adresse est introuvable dans le raccourci URL : %1</translation>
+ <translation>L&apos;adresse est introuvable dans le raccourci URL : %1</translation>
</message>
<message>
<location filename="../main.cpp" line="302"/>
@@ -195,8 +195,8 @@
</message>
<message>
<location filename="../main.cpp" line="370"/>
- <source>Could not find "%1". Please ensure it is installed first.</source>
- <translation>"%1" non trouvé. Vérifiez qu'il soit bien installé.</translation>
+ <source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
+ <translation>&quot;%1&quot; non trouvé. Vérifiez qu&apos;il soit bien installé.</translation>
</message>
<message>
<location filename="../main.cpp" line="421"/>
@@ -209,4 +209,72 @@
<translation>Le programme suivant a provoqué une erreur et a dû être fermé :</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimédia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Développement</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Éducation</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Graphiques</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Réseau</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Bureau</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Science</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Paramètres</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Système</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_fr_CA.ts b/src-qt5/core/lumina-open/i18n/lumina-open_fr_CA.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_fr_CA.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_fr_CA.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_gl.ts b/src-qt5/core/lumina-open/i18n/lumina-open_gl.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_gl.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_gl.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_he.ts b/src-qt5/core/lumina-open/i18n/lumina-open_he.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_he.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_he.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_hi.ts b/src-qt5/core/lumina-open/i18n/lumina-open_hi.ts
index eb7caa4a..6e078c67 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_hi.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_hi.ts
@@ -209,4 +209,72 @@
<translation>इस एप्लीकेशन में त्रुटि है और इसे बंद करने की आवश्यकता है:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">मल्टीमीडिया</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">विकास</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">पढाई</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">चित्र</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">नेटवर्क</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">कार्यालय</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">विज्ञान</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">सेटिंग्स</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">उपकरण</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_hr.ts b/src-qt5/core/lumina-open/i18n/lumina-open_hr.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_hr.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_hr.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_hu.ts b/src-qt5/core/lumina-open/i18n/lumina-open_hu.ts
index 33763efe..c9fa6680 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_hu.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_hu.ts
@@ -209,4 +209,72 @@
<translation>Az alkalmazás hibát észlelt, és bezárandó:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimédia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Fejlesztés</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Oktatás</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafika</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Hálózat</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Iroda</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Tudomány</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Beállítások</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Rendszer</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_id.ts b/src-qt5/core/lumina-open/i18n/lumina-open_id.ts
index dd4cea0e..143e052d 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_id.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_id.ts
@@ -209,4 +209,72 @@
<translation type="unfinished">Aplikasi berikut mengalami kesalahan dan diperlukan untuk menutup:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Pengembangan</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Edukasi</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafis</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Jaringan</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Kantor</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Sains</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Pengaturan</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistem</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_is.ts b/src-qt5/core/lumina-open/i18n/lumina-open_is.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_is.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_is.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_it.ts b/src-qt5/core/lumina-open/i18n/lumina-open_it.ts
index 0e3ea28c..aff2fc55 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_it.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_it.ts
@@ -209,4 +209,72 @@
<translation>La seguente applicazione ha avuto un errore e deve chiudere:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimediale</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Sviluppo</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Educazione</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafica</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Rete</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Ufficio</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Scienza</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Impostazioni</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistema</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ja.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ja.ts
index e42d4add..efe358cf 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ja.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ja.ts
@@ -210,4 +210,72 @@
<translation>このアプリケーションでエラーが発生したため、閉じる必要があります:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">マルチメディア</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">開発</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">教育</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">グラフィックス</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">ネットワーク</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">オフィス</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">科学</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">設定</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">システム</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ka.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ka.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ka.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ka.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ko.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ko.ts
index c1e7f594..519726b9 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ko.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ko.ts
@@ -209,4 +209,72 @@
<translation>다음의 프로그램에 오류가 발생하여 종료하였습니다:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">멀티미디어</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">개발</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">교육</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">그래픽</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">네트워크</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">업무</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">과학</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">설정</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">시스템</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_lt.ts b/src-qt5/core/lumina-open/i18n/lumina-open_lt.ts
index 425a59d9..b5035cbf 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_lt.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_lt.ts
@@ -209,4 +209,72 @@
<translation>Ši programa susidūrė su klaida ir turėjo būti užverta:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedija</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Programavimas</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Švietimas</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafika</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Tinklas</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Raštinė</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Mokslas</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Nustatymai</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistema</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_lv.ts b/src-qt5/core/lumina-open/i18n/lumina-open_lv.ts
index 1e0e91c5..cac62f3a 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_lv.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_lv.ts
@@ -209,4 +209,72 @@
<translation>Šai lietotnei radās kļūda un bija nepieciešams to aizvērt:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multivide</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Izstrāde</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Izglītība</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafika</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Tīkls</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Birojs</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Zinātne</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Iestatījumi</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistēma</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_mk.ts b/src-qt5/core/lumina-open/i18n/lumina-open_mk.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_mk.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_mk.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_mn.ts b/src-qt5/core/lumina-open/i18n/lumina-open_mn.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_mn.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_mn.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ms.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ms.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ms.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ms.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_mt.ts b/src-qt5/core/lumina-open/i18n/lumina-open_mt.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_mt.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_mt.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_nb.ts b/src-qt5/core/lumina-open/i18n/lumina-open_nb.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_nb.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_nb.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_nl.ts b/src-qt5/core/lumina-open/i18n/lumina-open_nl.ts
index 140decc3..9e114de9 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_nl.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_nl.ts
@@ -209,4 +209,72 @@
<translation>Er is een fout opgetreden in de volgende applicatie en moet daarom worden gesloten:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Ontwikkeling</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Educatie</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafisch</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Netwerk</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Kantoor</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Wetenschap</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Instellingen</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Systeem</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_pa.ts b/src-qt5/core/lumina-open/i18n/lumina-open_pa.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_pa.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_pa.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_pl.ts b/src-qt5/core/lumina-open/i18n/lumina-open_pl.ts
index 6b74e22b..e4abdbfc 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_pl.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_pl.ts
@@ -209,4 +209,72 @@
<translation>Aplikacja napotkała błąd i musi zostać zamknięta:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Narzędzia programistów</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Edukacja</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafika</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Sieć</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Biuro</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Nauka</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Ustawienia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">System</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_pt.ts b/src-qt5/core/lumina-open/i18n/lumina-open_pt.ts
index b73c69e3..55dcbeda 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_pt.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_pt.ts
@@ -209,4 +209,72 @@
<translation>O seguinte aplicativo encontrou um erro e teve que ser fechado:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimédia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Desenvolvimento</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Educação</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Gráficos</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Rede</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Escritório</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Ciência</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Definições</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistema</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_pt_BR.ts b/src-qt5/core/lumina-open/i18n/lumina-open_pt_BR.ts
index 5b1f717f..f202622c 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_pt_BR.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_pt_BR.ts
@@ -209,4 +209,72 @@
<translation>O seguinte aplicativo encontrou um erro e precisa ser fechado:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimídia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Desenvolvimento</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Educação</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Gráficos</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Redes</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Escritório</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Ciências</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Configurações</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistema</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ro.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ro.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ro.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ro.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ru.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ru.ts
index 53107836..472a6be3 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ru.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ru.ts
@@ -209,4 +209,72 @@
<translation>Следующее приложение вызвало ошибку и должно быть закрыто:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Мультимедиа</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Разработка</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Образование</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Графика</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Сети</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Офис</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Наука</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Настройки</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Система</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_sk.ts b/src-qt5/core/lumina-open/i18n/lumina-open_sk.ts
index 895c2890..3433ff4b 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_sk.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_sk.ts
@@ -209,4 +209,72 @@
<translation>Nasledujúca aplikácia hlási chybu a musí byť ukončená: </translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimédiá</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Vývoj</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Vzdelávanie</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafika</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Sieť</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Kancelária</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Veda</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Nastavenie</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Systém</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_sl.ts b/src-qt5/core/lumina-open/i18n/lumina-open_sl.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_sl.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_sl.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_sr.ts b/src-qt5/core/lumina-open/i18n/lumina-open_sr.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_sr.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_sr.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_sv.ts b/src-qt5/core/lumina-open/i18n/lumina-open_sv.ts
index be520af8..f8264625 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_sv.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_sv.ts
@@ -209,4 +209,72 @@
<translation>Följande program upplevde ett fel och behövde stängas:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Utveckling</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Utbildning</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafik</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Nätverk</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Kontorsprogram</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Vetenskap</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Inställningar</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">System</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_sw.ts b/src-qt5/core/lumina-open/i18n/lumina-open_sw.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_sw.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_sw.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ta.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ta.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ta.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ta.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_tg.ts b/src-qt5/core/lumina-open/i18n/lumina-open_tg.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_tg.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_tg.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_th.ts b/src-qt5/core/lumina-open/i18n/lumina-open_th.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_th.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_th.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_tr.ts b/src-qt5/core/lumina-open/i18n/lumina-open_tr.ts
index ff68fb01..fa53e159 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_tr.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_tr.ts
@@ -209,4 +209,72 @@
<translation>İzleyen uygulama bir hatayla karşılaştı ve kapatılması gerekti:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Multimedya</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Geliştirme</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Eğitim</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafik</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Ağ</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Ofis</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Bilim</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Ayarlar</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Sistem</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_uk.ts b/src-qt5/core/lumina-open/i18n/lumina-open_uk.ts
index bfd6a8a5..5fff2fcf 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_uk.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_uk.ts
@@ -209,4 +209,72 @@
<translation>Наступна програма викликало помилку и має бути закрита:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">Мультимедіа</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">Розробка</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">Освіта</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">Графіка</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">Мережа</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">Офіс</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">Наука</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">Налаштування</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">Система</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_uz.ts b/src-qt5/core/lumina-open/i18n/lumina-open_uz.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_uz.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_uz.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_vi.ts b/src-qt5/core/lumina-open/i18n/lumina-open_vi.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_vi.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_vi.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_zh_CN.ts b/src-qt5/core/lumina-open/i18n/lumina-open_zh_CN.ts
index 981affe2..312c9f6c 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_zh_CN.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_zh_CN.ts
@@ -209,4 +209,72 @@
<translation>下面的应用程序遇到错误,需要关闭:</translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished">多媒体</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished">开发</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished">教育</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished">图像</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished">网络</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished">办公</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished">科学</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished">设置</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished">系统</translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_zh_HK.ts b/src-qt5/core/lumina-open/i18n/lumina-open_zh_HK.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_zh_HK.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_zh_HK.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_zh_TW.ts b/src-qt5/core/lumina-open/i18n/lumina-open_zh_TW.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_zh_TW.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_zh_TW.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_zu.ts b/src-qt5/core/lumina-open/i18n/lumina-open_zu.ts
index cfc1b766..bc022cb0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_zu.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_zu.ts
@@ -209,4 +209,72 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>XDGDesktopList</name>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="603"/>
+ <source>Multimedia</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="604"/>
+ <source>Development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="605"/>
+ <source>Education</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="606"/>
+ <source>Games</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="607"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="608"/>
+ <source>Network</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="609"/>
+ <source>Office</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="610"/>
+ <source>Science</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="611"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="612"/>
+ <source>System</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="613"/>
+ <source>Utility</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="614"/>
+ <source>Wine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../libLumina/LuminaXDG.cpp" line="615"/>
+ <source>Unsorted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/src-qt5/core/lumina-open/main.cpp b/src-qt5/core/lumina-open/main.cpp
index d421b5b6..72d09f42 100644
--- a/src-qt5/core/lumina-open/main.cpp
+++ b/src-qt5/core/lumina-open/main.cpp
@@ -88,9 +88,9 @@ void LaunchAutoStart(){
QString cmd = xdgapps[i]->getDesktopExec();
if(cmd.contains("%")){cmd = cmd.remove("%U").remove("%u").remove("%F").remove("%f").remove("%i").remove("%c").remove("%k").simplified(); }
//Now run the command
- if(!cmd.isEmpty()){
+ if(!cmd.isEmpty()){
qDebug() << " - Auto-Starting File:" << xdgapps[i]->filePath;
- QProcess::startDetached(cmd);
+ QProcess::startDetached(cmd);
}
}
//make sure we clean up all the xdgapps structures
@@ -103,7 +103,7 @@ QString cmdFromUser(int argc, char **argv, QString inFile, QString extension, QS
if(extension=="mimetype"){
//qDebug() << "inFile:" << inFile;
QStringList matches = LXDG::findAppMimeForFile(inFile, true).split("::::"); //allow multiple matches
- //qDebug() << "Matches:" << matches;
+ qDebug() << "Mimetype Matches:" << matches;
for(int i=0; i<matches.length(); i++){
defApp = LXDG::findDefaultAppForMime(matches[i]);
//qDebug() << "MimeType:" << matches[i] << defApp;
@@ -111,7 +111,7 @@ QString cmdFromUser(int argc, char **argv, QString inFile, QString extension, QS
else if(i+1==matches.length()){ extension = matches[0]; }
}
}else{ defApp = LFileDialog::getDefaultApp(extension); }
- //qDebug() << "extension:" << extension << "defApp:" << defApp;
+ qDebug() << "Mimetype:" << extension << "defApp:" << defApp;
if( !defApp.isEmpty() && !showDLG ){
if(defApp.endsWith(".desktop")){
XDGDesktop DF(defApp);
@@ -159,10 +159,10 @@ QString cmdFromUser(int argc, char **argv, QString inFile, QString extension, QS
if(!w.appPath.isEmpty()){ path = w.appPath; }
//Just do the default application registration here for now
// might move it to the runtime phase later after seeing that the app has successfully started
- if(w.setDefault){
+ if(w.setDefault){
if(!w.appFile.isEmpty()){ LFileDialog::setDefaultApp(extension, w.appFile); }
else{ LFileDialog::setDefaultApp(extension, w.appExec); }
- }else{ LFileDialog::setDefaultApp(extension, ""); }
+ }
//Now return the resulting application command
return w.appExec;
}
@@ -234,7 +234,7 @@ void getCMD(int argc, char ** argv, QString& binary, QString& args, QString& pat
bool isFile=false; bool isUrl=false;
QString extension;
//Quick check/replacement for the URL syntax of a file
- if(inFile.startsWith("file://")){ inFile.remove(0,7); }
+ if(inFile.startsWith("file://")){ inFile = QUrl(inFile).toLocalFile(); } //change from URL to file format for a local file
//First make sure this is not a binary name first
QString bin = inFile.section(" ",0,0).simplified();
if(LUtils::isValidBinary(bin) && !bin.endsWith(".desktop") && !QFileInfo(inFile).isDir() ){isFile=true; }
@@ -317,10 +317,10 @@ void getCMD(int argc, char ** argv, QString& binary, QString& args, QString& pat
}
}
//Now assemble the exec string (replace file/url field codes as necessary)
- if(useInputFile){
+ if(useInputFile){
args = inFile; //just to keep them distinct internally
// NOTE: lumina-open is only designed for a single input file,
- // so no need to distinguish between the list codes (uppercase)
+ // so no need to distinguish between the list codes (uppercase)
// and the single-file codes (lowercase)
//Special "inFile" format replacements for input codes
if( (cmd.contains("%f") || cmd.contains("%F") ) ){
diff --git a/src-qt5/core/lumina-theme-engine/desktop_qss/DarkGlass.qss b/src-qt5/core/lumina-theme-engine/desktop_qss/DarkGlass.qss
new file mode 100644
index 00000000..2de9fefa
--- /dev/null
+++ b/src-qt5/core/lumina-theme-engine/desktop_qss/DarkGlass.qss
@@ -0,0 +1,91 @@
+QWidget#LuminaBootSplash{
+ background: qradialgradient(spread:reflect, cx:0.113757, cy:0.875, radius:0.7, fx:0.045, fy:0.954545, stop:0 palette(dark), stop:1 palette(mid) );
+ border-radius: 5px;
+}
+
+LDPlugin#applauncher{
+ background-color: transparent;
+ border: none;
+}
+LDPlugin#applauncher QToolButton, LDPlugin, LDPlugin#desktopview QListWidget::item{
+ background-color: qradialgradient(spread:reflect, cx:0.113757, cy:0.875, radius:0.7, fx:0.045, fy:0.954545, stop:0 rgba(5, 5, 5, 30), stop:1 rgba(2, 2, 2, 70));
+ border-width: 3px;
+ border-style: solid;
+ border-radius: 5px;
+ border-top-color: qradialgradient(spread:pad, cx:0.5, cy:1, radius:0.5, fx:0.5, fy:1, stop:0 rgba(0, 0, 0, 30), stop:0.724868 rgba(0, 0, 0, 60), stop:1 rgba(0, 0, 0, 10));
+ border-bottom-color: qradialgradient(spread:pad, cx:0.5, cy:0, radius:0.5, fx:0.5, fy:0, stop:0 rgba(0,0,0, 30), stop:0.724868 rgba(0,0,0, 60), stop:1 rgba(0,0,0, 10));
+ border-left-color: qradialgradient(spread:pad, cx:1, cy:0.5, radius:0.5, fx:1, fy:0.5, stop:0 rgba(0,0,0, 30), stop:0.724868 rgba(0,0,0, 60), stop:1 rgba(0,0,0, 10));
+ border-right-color: qradialgradient(spread:pad, cx:0, cy:0.5, radius:0.5, fx:1, fy:0.5, stop:0 rgba(0,0,0, 30), stop:0.724868 rgba(0,0,0, 60), stop:1 rgba(0,0,0, 10));
+ color: white;
+}
+
+LDPlugin#applauncher QToolButton:hover, LDPlugin#desktopview QListWidget::item:hover{
+ background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 1.1, stop: 0.1 palette(highlight), stop: 1 transparent);
+ color: palette(highlighted-text);
+ border-width: 3px;
+ border-style: solid;
+ border-radius: 5px;
+ border-top-color: qradialgradient(spread:pad, cx:0.5, cy:1, radius:0.5, fx:0.5, fy:1, stop:0 rgba(0,0,0, 30), stop:0.724868 rgba(0,0,0, 60), stop:1 rgba(0,0,0, 10));
+ border-bottom-color: qradialgradient(spread:pad, cx:0.5, cy:0, radius:0.5, fx:0.5, fy:0, stop:0 rgba(0,0,0, 30), stop:0.724868 rgba(0,0,0, 60), stop:1 rgba(0,0,0, 10));
+ border-left-color: qradialgradient(spread:pad, cx:1, cy:0.5, radius:0.5, fx:1, fy:0.5, stop:0 rgba(0,0,0, 30), stop:0.724868 rgba(0,0,0, 60), stop:1 rgba(0,0,0, 10));
+ border-right-color: qradialgradient(spread:pad, cx:0, cy:0.5, radius:0.5, fx:1, fy:0.5, stop:0 rgba(0,0,0, 30), stop:0.724868 rgba(0,0,0, 60), stop:1 rgba(0,0,0, 10));
+}
+QWidget#LuminaPanelColor{
+ background: qradialgradient(spread:reflect, cx:0.113757, cy:0.875, radius:0.7, fx:0.045, fy:0.954545, stop:0 rgba(2, 2, 2, 60), stop:1 rgba(0, 0, 0, 110));
+ border-radius: 3px;
+}
+
+/*Special taskmanager window buttons: based on window state*/
+LTBWidget, LPanel QToolButton, QDialog#LeaveDialog QToolButton{
+ border: 1px solid transparent;
+ border-radius: 3px;
+ background: transparent;
+}
+LTBWidget::menu-indicator{ image: none; } /*disable the menu arrow*/
+LTBWidget#WindowVisible{
+ background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 1.1, stop: 0.1 palette(mid), stop: 1 transparent);
+}
+LTBWidget#WindowInvisible{
+ background: transparent;
+}
+LTBWidget#WindowActive{
+ background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 1.1, stop: 0.1 palette(midlight), stop: 1 transparent);
+}
+LTBWidget#WindowAttention{
+ background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 1.1, stop: 0.1 palette(highlight), stop: 1 transparent);
+}
+LTBWidget:hover, LTBWidget#WindowVisible:hover, LTBWidget#WindowInvisible:hover, LTBWidget#WindowActive:hover, LTBWidget#WindowAttention:hover, QToolButton:hover, QDialog#LeaveDialog QToolButton:hover{
+ background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 1.1, stop: 0.1 palette(highlight), stop: 1 transparent);
+ color: palette(highlighted-text);
+ border-width: 1px;
+ border-style: solid;
+ border-top-color: qradialgradient(spread:pad, cx:0.5, cy:1, radius:0.5, fx:0.5, fy:1, stop:0 rgba(0,0,0, 30), stop:0.724868 rgba(0,0,0, 60), stop:1 rgba(0,0,0, 10));
+ border-bottom-color: qradialgradient(spread:pad, cx:0.5, cy:0, radius:0.5, fx:0.5, fy:0, stop:0 rgba(0,0,0, 30), stop:0.724868 rgba(0,0,0, 60), stop:1 rgba(0,0,0, 10));
+ border-left-color: qradialgradient(spread:pad, cx:1, cy:0.5, radius:0.5, fx:1, fy:0.5, stop:0 rgba(0,0,0, 30), stop:0.724868 rgba(0,0,0, 60), stop:1 rgba(0,0,0, 10));
+ border-right-color: qradialgradient(spread:pad, cx:0, cy:0.5, radius:0.5, fx:1, fy:0.5, stop:0 rgba(0,0,0, 30), stop:0.724868 rgba(0,0,0, 60), stop:1 rgba(0,0,0, 10));
+}
+
+/* CALENDER WIDGET */
+ /* (This is a special hack since there is no official support for stylesheets for this widget) */
+ QCalendarWidget QWidget#qt_calendar_navigationbar{
+ background-color: palette(base);
+ }
+QCalendarWidget QWidget{
+ background-color: palette(base);
+ alternate-background-color: palette(alternate-base);
+ color: palette(text);
+}
+QCalendarWidget QAbstractButton{
+ background-color: transparent;
+}
+QCalendarWidget QAbstractButton::menu-indicator{
+ image: none;
+}
+QCalendarWidget QAbstractItemView{
+ selection-background-color: qradialgradient(spread:reflect, cx:0.113757, cy:0.875, radius:0.7, fx:0.045, fy:0.954545, stop:0 rgba(3, 4, 4, 20), stop:1 rgba(0, 0, 0, 100));
+ selection-color: palette(highlighted-text);
+}
+QCalendarWidget QWidget#qt_calendar_calendarview{
+ background-color: palette(dark);
+ border: none;
+}
diff --git a/src-qt5/core/lumina-theme-engine/desktop_qss/Glass.qss b/src-qt5/core/lumina-theme-engine/desktop_qss/Glass.qss
new file mode 100644
index 00000000..502c0a44
--- /dev/null
+++ b/src-qt5/core/lumina-theme-engine/desktop_qss/Glass.qss
@@ -0,0 +1,91 @@
+QWidget#LuminaBootSplash{
+ background: qradialgradient(spread:reflect, cx:0.113757, cy:0.875, radius:0.7, fx:0.045, fy:0.954545, stop:0 palette(base), stop:1 palette(light) );
+ border-radius: 5px;
+}
+
+LDPlugin#applauncher{
+ background-color: transparent;
+ border: none;
+}
+LDPlugin#applauncher QToolButton, LDPlugin, LDPlugin#desktopview QListWidget::item{
+ background-color: qradialgradient(spread:reflect, cx:0.113757, cy:0.875, radius:0.7, fx:0.045, fy:0.954545, stop:0 rgba(250, 250, 250, 30), stop:1 rgba(252, 252, 252, 70));
+ border-width: 3px;
+ border-style: solid;
+ border-radius: 5px;
+ border-top-color: qradialgradient(spread:pad, cx:0.5, cy:1, radius:0.5, fx:0.5, fy:1, stop:0 rgba(255,255,255, 30), stop:0.724868 rgba(255,255,255, 60), stop:1 rgba(255,255,255, 10));
+ border-bottom-color: qradialgradient(spread:pad, cx:0.5, cy:0, radius:0.5, fx:0.5, fy:0, stop:0 rgba(255,255,255, 30), stop:0.724868 rgba(255,255,255, 60), stop:1 rgba(255,255,255, 10));
+ border-left-color: qradialgradient(spread:pad, cx:1, cy:0.5, radius:0.5, fx:1, fy:0.5, stop:0 rgba(255,255,255, 30), stop:0.724868 rgba(255,255,255, 60), stop:1 rgba(255,255,255, 10));
+ border-right-color: qradialgradient(spread:pad, cx:0, cy:0.5, radius:0.5, fx:1, fy:0.5, stop:0 rgba(255,255,255, 30), stop:0.724868 rgba(255,255,255, 60), stop:1 rgba(255,255,255, 10));
+ color: white;
+}
+
+LDPlugin#applauncher QToolButton:hover, LDPlugin#desktopview QListWidget::item:hover{
+ background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 1.1, stop: 0.1 palette(highlight), stop: 1 transparent);
+ color: palette(highlighted-text);
+ border-width: 3px;
+ border-style: solid;
+ border-radius: 5px;
+ border-top-color: qradialgradient(spread:pad, cx:0.5, cy:1, radius:0.5, fx:0.5, fy:1, stop:0 rgba(255,255,255, 30), stop:0.724868 rgba(255,255,255, 60), stop:1 rgba(255,255,255, 10));
+ border-bottom-color: qradialgradient(spread:pad, cx:0.5, cy:0, radius:0.5, fx:0.5, fy:0, stop:0 rgba(255,255,255, 30), stop:0.724868 rgba(255,255,255, 60), stop:1 rgba(255,255,255, 10));
+ border-left-color: qradialgradient(spread:pad, cx:1, cy:0.5, radius:0.5, fx:1, fy:0.5, stop:0 rgba(255,255,255, 30), stop:0.724868 rgba(255,255,255, 60), stop:1 rgba(255,255,255, 10));
+ border-right-color: qradialgradient(spread:pad, cx:0, cy:0.5, radius:0.5, fx:1, fy:0.5, stop:0 rgba(255,255,255, 30), stop:0.724868 rgba(255,255,255, 60), stop:1 rgba(255,255,255, 10));
+}
+QWidget#LuminaPanelColor{
+ background: qradialgradient(spread:reflect, cx:0.113757, cy:0.875, radius:0.7, fx:0.045, fy:0.954545, stop:0 rgba(252, 252, 252, 60), stop:1 rgba(255,255,255, 110));
+ border-radius: 3px;
+}
+
+/*Special taskmanager window buttons: based on window state*/
+LTBWidget, LPanel QToolButton, QDialog#LeaveDialog QToolButton{
+ border: 1px solid transparent;
+ border-radius: 3px;
+ background: transparent;
+}
+LTBWidget::menu-indicator{ image: none; } /*disable the menu arrow*/
+LTBWidget#WindowVisible{
+ background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 1.1, stop: 0.1 palette(mid), stop: 1 transparent);
+}
+LTBWidget#WindowInvisible{
+ background: transparent;
+}
+LTBWidget#WindowActive{
+ background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 1.1, stop: 0.1 palette(dark), stop: 1 transparent);
+}
+LTBWidget#WindowAttention{
+ background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 1.1, stop: 0.1 palette(highlight), stop: 1 transparent);
+}
+LTBWidget:hover, LTBWidget#WindowVisible:hover, LTBWidget#WindowInvisible:hover, LTBWidget#WindowActive:hover, LTBWidget#WindowAttention:hover, QToolButton:hover, QDialog#LeaveDialog QToolButton:hover{
+ background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 1.1, stop: 0.1 palette(highlight), stop: 1 transparent);
+ color: palette(highlighted-text);
+ border-width: 1px;
+ border-style: solid;
+ border-top-color: qradialgradient(spread:pad, cx:0.5, cy:1, radius:0.5, fx:0.5, fy:1, stop:0 rgba(255,255,255, 30), stop:0.724868 rgba(255,255,255, 60), stop:1 rgba(255,255,255, 10));
+ border-bottom-color: qradialgradient(spread:pad, cx:0.5, cy:0, radius:0.5, fx:0.5, fy:0, stop:0 rgba(255,255,255, 30), stop:0.724868 rgba(255,255,255, 60), stop:1 rgba(255,255,255, 10));
+ border-left-color: qradialgradient(spread:pad, cx:1, cy:0.5, radius:0.5, fx:1, fy:0.5, stop:0 rgba(255,255,255, 30), stop:0.724868 rgba(255,255,255, 60), stop:1 rgba(255,255,255, 10));
+ border-right-color: qradialgradient(spread:pad, cx:0, cy:0.5, radius:0.5, fx:1, fy:0.5, stop:0 rgba(255,255,255, 30), stop:0.724868 rgba(255,255,255, 60), stop:1 rgba(255,255,255, 10));
+}
+
+/* CALENDER WIDGET */
+ /* (This is a special hack since there is no official support for stylesheets for this widget) */
+ QCalendarWidget QWidget#qt_calendar_navigationbar{
+ background-color: palette(base);
+ }
+QCalendarWidget QWidget{
+ background-color: palette(base);
+ alternate-background-color: palette(alternate-base);
+ color: palette(text);
+}
+QCalendarWidget QAbstractButton{
+ background-color: transparent;
+}
+QCalendarWidget QAbstractButton::menu-indicator{
+ image: none;
+}
+QCalendarWidget QAbstractItemView{
+ selection-background-color: qradialgradient(spread:reflect, cx:0.113757, cy:0.875, radius:0.7, fx:0.045, fy:0.954545, stop:0 rgba(253, 254, 254, 20), stop:1 rgba(255,255,255, 100));
+ selection-color: palette(highlighted-text);
+}
+QCalendarWidget QWidget#qt_calendar_calendarview{
+ background-color: palette(light);
+ border: none;
+}
diff --git a/src-qt5/core/lumina-theme-engine/lumina-theme-engine.pro b/src-qt5/core/lumina-theme-engine/lumina-theme-engine.pro
index d91091d3..e1023752 100644
--- a/src-qt5/core/lumina-theme-engine/lumina-theme-engine.pro
+++ b/src-qt5/core/lumina-theme-engine/lumina-theme-engine.pro
@@ -8,4 +8,10 @@ SUBDIRS += src/lthemeengine-qtplugin \
colors.files = colors/*.conf
colors.path = $${L_SHAREDIR}/lthemeengine/colors
-INSTALLS += colors
+qss.files = qss/*.qss
+qss.path = $${L_SHAREDIR}/lthemeengine/qss
+
+dqss.files = desktop_qss/*.qss
+dqss.path = $${L_SHAREDIR}/lthemeengine/desktop_qss
+
+INSTALLS += colors qss dqss
diff --git a/src-qt5/core/lumina-theme-engine/qss/scrollbar-simple.qss b/src-qt5/core/lumina-theme-engine/qss/scrollbar-simple.qss
new file mode 100644
index 00000000..265ff20c
--- /dev/null
+++ b/src-qt5/core/lumina-theme-engine/qss/scrollbar-simple.qss
@@ -0,0 +1,30 @@
+/* SCROLLBARS (NOTE: Changing 1 subcontrol means you have to change all of them)*/
+QScrollBar{
+ background: palette(alternate-base);
+}
+QScrollBar:horizontal{
+ margin: 0px 0px 0px 0px;
+}
+QScrollBar:vertical{
+ margin: 0px 0px 0px 0px;
+}
+QScrollBar::handle{
+ background: palette(base);
+ border: 1px solid transparent;
+ border-radius: 7px;
+}
+QScrollBar::handle:hover, QScrollBar::add-line:hover, QScrollBar::sub-line:hover{
+ background: palette(highlight);
+}
+QScrollBar::add-line{
+subcontrol-origin: none;
+}
+QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical{
+height: 0px;
+}
+QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal{
+width: 0px;
+}
+QScrollBar::sub-line{
+subcontrol-origin: none;
+}
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.cpp
index 453bde1d..670e1c9c 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.cpp
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.cpp
@@ -16,6 +16,8 @@
#include <QFile>
#include <QFileSystemWatcher>
+#include <stdlib.h>
+
#include <lthemeengine/lthemeengine.h>
#include "lthemeengineplatformtheme.h"
#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)) && !defined(QT_NO_DBUS)
@@ -130,20 +132,38 @@ void lthemeenginePlatformTheme::applySettings(){
if(m_customPalette){ qApp->setPalette(*m_customPalette); }
else{ qApp->setPalette(qApp->style()->standardPalette()); }
}
- //do not override application style
- if(m_prevStyleSheet == qApp->styleSheet()){ qApp->setStyleSheet(m_userStyleSheet); }
- else{ qCDebug(llthemeengine) << "custom style sheet is disabled";}
- m_prevStyleSheet = m_userStyleSheet;
+ //do not override application style if one is already set by the app itself
+ QString orig = qApp->styleSheet();
+ if(orig.startsWith(m_oldStyleSheet)){ orig = orig.remove(m_oldStyleSheet); }
+ qApp->setStyleSheet(m_userStyleSheet+orig); //make sure the app style has higher priority than ours
+ m_oldStyleSheet = m_userStyleSheet;
+
}
#endif
QGuiApplication::setFont(m_generalFont); //apply font
+ bool ithemechange = m_iconTheme != QIcon::themeName();
QIcon::setThemeName(m_iconTheme); //apply icons
+ //See if we need to reload the application icon from the new theme
+ if(ithemechange){
+ QString appIcon = qApp->windowIcon().name();
+ if(!appIcon.isEmpty() && QIcon::hasThemeIcon(appIcon)){ qApp->setWindowIcon(QIcon::fromTheme(appIcon)); }
+ QWindowList wins = qApp->topLevelWindows();
+ for(int i=0; i<wins.length(); i++){
+ QString winIcon = wins[i]->icon().name();
+ if(!winIcon.isEmpty() && QIcon::hasThemeIcon(winIcon)){ wins[i]->setIcon(QIcon::fromTheme(winIcon)); }
+ }
+ }
+ bool cthemechange = m_cursorTheme != QString(getenv("X_CURSOR_THEME"));
+ setenv("X_CURSOR_THEME", m_cursorTheme.toLocal8Bit().data(), 1);
+ //qDebug() << "Icon Theme Change:" << m_iconTheme << QIcon::themeSearchPaths();
if(m_customPalette && m_usePalette){ QGuiApplication::setPalette(*m_customPalette); } //apply palette
#ifdef QT_WIDGETS_LIB
if(hasWidgets()){
+ QEvent et(QEvent::ThemeChange);
+ QEvent ec(QEvent::CursorChange);
foreach (QWidget *w, qApp->allWidgets()){
- QEvent e(QEvent::ThemeChange);
- QApplication::sendEvent(w, &e);
+ if(ithemechange){ QApplication::sendEvent(w, &et); }
+ if(cthemechange){ QApplication::sendEvent(w, &ec); }
}
}
#endif
@@ -156,13 +176,13 @@ void lthemeenginePlatformTheme::createFSWatcher(){
watcher->addPath(lthemeengine::configPath());
QTimer *timer = new QTimer(this);
timer->setSingleShot(true);
- timer->setInterval(3000);
+ timer->setInterval(500);
connect(watcher, SIGNAL(directoryChanged(QString)), timer, SLOT(start()));
connect(timer, SIGNAL(timeout()), SLOT(updateSettings()));
}
void lthemeenginePlatformTheme::updateSettings(){
- qCDebug(llthemeengine) << "updating settings..";
+ //qCDebug(llthemeengine) << "updating settings..";
readSettings();
applySettings();
}
@@ -180,6 +200,7 @@ void lthemeenginePlatformTheme::readSettings(){
QString schemePath = settings.value("color_scheme_path","airy").toString();
m_customPalette = new QPalette(loadColorScheme(schemePath));
}
+ m_cursorTheme = settings.value("cursor_theme","").toString();
m_iconTheme = settings.value("icon_theme", "material-design-light").toString();
settings.endGroup();
settings.beginGroup("Fonts");
@@ -211,7 +232,10 @@ void lthemeenginePlatformTheme::readSettings(){
}
//load style sheets
#ifdef QT_WIDGETS_LIB
- QStringList qssPaths = settings.value("stylesheets").toStringList();
+ QStringList qssPaths;
+ if(qApp->applicationFilePath().section("/",-1).startsWith("lumina-desktop") ){ qssPaths << settings.value("desktop_stylesheets").toStringList(); }
+ qssPaths << settings.value("stylesheets").toStringList();
+ //qDebug() << "Loaded Stylesheets:" << qApp->applicationName() << qssPaths;
m_userStyleSheet = loadStyleSheets(qssPaths);
#endif
settings.endGroup();
@@ -224,6 +248,7 @@ bool lthemeenginePlatformTheme::hasWidgets(){
#endif
QString lthemeenginePlatformTheme::loadStyleSheets(const QStringList &paths){
+ //qDebug() << "Loading Stylesheets:" << paths;
QString content;
foreach (QString path, paths){
if(!QFile::exists(path)){ continue; }
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.h
index 17323328..f521d457 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.h
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.h
@@ -66,7 +66,7 @@ private:
#endif
QString loadStyleSheets(const QStringList &paths);
QPalette loadColorScheme(QString filePath);
- QString m_style, m_iconTheme, m_userStyleSheet, m_prevStyleSheet;
+ QString m_style, m_iconTheme, m_userStyleSheet, m_oldStyleSheet, m_cursorTheme;
QPalette *m_customPalette = nullptr;
QFont m_generalFont, m_fixedFont;
int m_doubleClickInterval;
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.cpp
index 04ca6a0b..88bde228 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.cpp
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.cpp
@@ -6,6 +6,8 @@
#include <QMessageBox>
#include <QMenu>
#include <QIcon>
+#include <QTimer>
+
#include "lthemeengine.h"
#include "appearancepage.h"
#include "paletteeditdialog.h"
@@ -81,6 +83,8 @@ void AppearancePage::createColorScheme(){
QString schemePath = lthemeengine::userColorSchemePath() + "/" + name;
createColorScheme(schemePath, palette());
m_ui->colorSchemeComboBox->addItem(name.section('.',0,0), schemePath);
+ m_ui->colorSchemeComboBox->setCurrentIndex( m_ui->colorSchemeComboBox->count()-1);
+ QTimer::singleShot(10, this, SLOT(changeColorScheme()) );
}
void AppearancePage::changeColorScheme(){
@@ -125,6 +129,8 @@ void AppearancePage::copyColorScheme(){
QString newPath = lthemeengine::userColorSchemePath() + "/" + name;
QFile::copy(m_ui->colorSchemeComboBox->currentData().toString(), newPath);
m_ui->colorSchemeComboBox->addItem(name.section('.',0,0), newPath);
+ m_ui->colorSchemeComboBox->setCurrentIndex( m_ui->colorSchemeComboBox->count()-1);
+ QTimer::singleShot(10, this, SLOT(changeColorScheme()) );
}
void AppearancePage::renameColorScheme(){
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.ui b/src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.ui
index cd442930..91b65245 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.ui
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.ui
@@ -161,9 +161,15 @@
<property name="text">
<string>...</string>
</property>
+ <property name="icon">
+ <iconset theme="view-more-vertical"/>
+ </property>
<property name="popupMode">
<enum>QToolButton::InstantPopup</enum>
</property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
<property name="arrowType">
<enum>Qt::NoArrow</enum>
</property>
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/cursorthemepage.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/cursorthemepage.cpp
new file mode 100644
index 00000000..1d84164f
--- /dev/null
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/cursorthemepage.cpp
@@ -0,0 +1,139 @@
+#include <QSettings>
+#include <QFileInfo>
+#include <QFileInfoList>
+#include <QDir>
+#include <QTreeWidgetItem>
+#include <QImageReader>
+#include <QLocale>
+#include "lthemeengine.h"
+#include "cursorthemepage.h"
+#include "ui_cursorthemepage.h"
+
+CursorThemePage::CursorThemePage(QWidget *parent) : TabPage(parent), m_ui(new Ui::CursorThemePage){
+ m_ui->setupUi(this);
+ loadThemes();
+ readSettings();
+}
+
+CursorThemePage::~CursorThemePage(){
+ delete m_ui;
+}
+
+void CursorThemePage::writeSettings(){
+ QSettings settings(lthemeengine::configFile(), QSettings::IniFormat);
+ QTreeWidgetItem *item = m_ui->treeWidget->currentItem();
+ if(item){
+ settings.setValue("Appearance/cursor_theme", item->data(3, Qt::UserRole));
+ lthemeengine::setCursorTheme(item->data(3, Qt::UserRole).toString() );
+ }
+}
+
+void CursorThemePage::readSettings(){
+ QSettings settings(lthemeengine::configFile(), QSettings::IniFormat);
+ QString name = settings.value("Appearance/cursor_theme").toString();
+ if(name.isEmpty()){ return; }
+ for(int i = 0; i < m_ui->treeWidget->topLevelItemCount(); ++i){
+ QTreeWidgetItem *item = m_ui->treeWidget->topLevelItem(i);
+ if(item->data(3, Qt::UserRole).toString() == name){
+ m_ui->treeWidget->setCurrentItem(item);
+ break;
+ }
+ }
+}
+
+void CursorThemePage::loadThemes(){
+ /*QFileInfoList themeFileList;
+ foreach(QString path, lthemeengine::iconPaths()){
+ QDir dir(path);
+ dir.setFilter(QDir::Dirs | QDir::NoDotDot | QDir::NoDot);
+ foreach (QFileInfo info, dir.entryInfoList()){
+ QDir themeDir(info.absoluteFilePath());
+ themeDir.setFilter(QDir::Files);
+ themeFileList << themeDir.entryInfoList(QStringList() << "index.theme");
+ }
+ }*/
+ /*foreach(QFileInfo info, themeFileList){
+ loadTheme(info.canonicalFilePath());
+ }*/
+ QStringList themes = lthemeengine::availableSystemCursors();
+ for(int i=0; i<themes.length(); i++){ loadTheme(themes[i]); }
+}
+
+void CursorThemePage::loadTheme(const QString &path){
+ //QSettings config(path, QSettings::IniFormat);
+ //config.setIniCodec("UTF-8");
+ //config.beginGroup("Icon Theme");
+ //QStringList dirs = config.value("Directories").toStringList();
+ //if(dirs.isEmpty() || config.value("Hidden", false).toBool()){ return; }
+ QString name, comment;
+ name = comment = path.section("/",-1);
+ /*QString lang = QLocale::system().name();
+ name = config.value(QString("Name[%1]").arg(lang)).toString();
+ comment = config.value(QString("Comment[%1]").arg(lang)).toString();
+ if(lang.contains("_")){ lang = lang.split("_").first(); }
+ if(name.isEmpty()){ name = config.value(QString("Name[%1]").arg(lang)).toString(); }
+ if(comment.isEmpty()){ comment = config.value(QString("Comment[%1]").arg(lang)).toString(); }
+ if(name.isEmpty()){ name = config.value("Name").toString(); }
+ if(comment.isEmpty()){ comment = config.value("Comment").toString(); }
+ config.endGroup();*/
+ QIcon icon1;// = findIcon(path, 24, "document-save");
+ QIcon icon2;//= findIcon(path, 24, "document-print");
+ QIcon icon3;// = findIcon(path, 24, "media-playback-stop");
+ QTreeWidgetItem *item = new QTreeWidgetItem();
+ item->setIcon(0, icon1);
+ item->setIcon(1, icon2);
+ item->setIcon(2, icon3);
+ item->setText(3, name);
+ item->setData(3, Qt::UserRole, path.section("/",-1));
+ item->setToolTip(3, comment);
+ item->setSizeHint(0, QSize(24,24));
+ m_ui->treeWidget->addTopLevelItem(item);
+ m_ui->treeWidget->resizeColumnToContents(0);
+ m_ui->treeWidget->resizeColumnToContents(1);
+ m_ui->treeWidget->resizeColumnToContents(2);
+ m_ui->treeWidget->resizeColumnToContents(3);
+}
+
+QIcon CursorThemePage::findIcon(const QString &themePath, int size, const QString &name){
+ QSettings config(themePath, QSettings::IniFormat);
+ config.beginGroup("Icon Theme");
+ QStringList dirs = config.value("Directories").toStringList();
+ QStringList parents = config.value("Inherits").toStringList();
+ bool haveInherits = config.contains("Inherits");
+ config.endGroup();
+ foreach (QString dir, dirs){
+ config.beginGroup(dir);
+ if(config.value("Size").toInt() == size){
+ QDir iconDir = QFileInfo(themePath).path() + "/" + dir;
+ iconDir.setFilter(QDir::Files);
+ iconDir.setNameFilters(QStringList () << name + ".*");
+ if(iconDir.entryInfoList().isEmpty())
+ continue;
+ return QIcon(iconDir.entryInfoList().first().absoluteFilePath());
+ }
+ config.endGroup();
+ }
+ foreach (QString dir, dirs){
+ config.beginGroup(dir);
+ if(abs(config.value("Size").toInt() - size) < 4){
+ QDir iconDir = QFileInfo(themePath).path() + "/" + dir;
+ iconDir.setFilter(QDir::Files);
+ iconDir.setNameFilters(QStringList () << name + ".*");
+ if(iconDir.entryInfoList().isEmpty())
+ continue;
+ return QIcon(iconDir.entryInfoList().first().absoluteFilePath());
+ }
+ config.endGroup();
+ }
+ if (!haveInherits){ return QIcon(); }
+ parents.append("hicolor"); //add fallback themes
+ parents.append("gnome");
+ parents.removeDuplicates();
+ foreach (QString parent, parents){
+ QString parentThemePath = QDir(QFileInfo(themePath).path() + "/../" + parent).canonicalPath() + "/index.theme";
+ if(!QFile::exists(parentThemePath) || parentThemePath == themePath){ continue; }
+ QIcon icon = findIcon(parentThemePath, size, name);
+ if(!icon.isNull()){ return icon; }
+ }
+ return QIcon();
+}
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/cursorthemepage.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/cursorthemepage.h
new file mode 100644
index 00000000..e221520b
--- /dev/null
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/cursorthemepage.h
@@ -0,0 +1,29 @@
+#ifndef CURSORTHEMEPAGE_H
+#define CURSORTHEMEPAGE_H
+
+#include <QIcon>
+#include "tabpage.h"
+
+namespace Ui {
+class CursorThemePage;
+}
+
+class CursorThemePage : public TabPage
+{
+ Q_OBJECT
+
+public:
+ explicit CursorThemePage(QWidget *parent = 0);
+ ~CursorThemePage();
+
+ void writeSettings();
+
+private:
+ void readSettings();
+ void loadThemes();
+ void loadTheme(const QString &path);
+ QIcon findIcon(const QString &themePath, int size, const QString &name);
+ Ui::CursorThemePage *m_ui;
+};
+
+#endif // ICONTHEMEPAGE_H
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/cursorthemepage.ui b/src-qt5/core/lumina-theme-engine/src/lthemeengine/cursorthemepage.ui
new file mode 100644
index 00000000..3e0a5da1
--- /dev/null
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/cursorthemepage.ui
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>CursorThemePage</class>
+ <widget class="QWidget" name="CursorThemePage">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string notr="true">Form</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QTreeWidget" name="treeWidget">
+ <property name="columnCount">
+ <number>4</number>
+ </property>
+ <attribute name="headerVisible">
+ <bool>false</bool>
+ </attribute>
+ <column>
+ <property name="text">
+ <string notr="true">1</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string notr="true">2</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string notr="true">3</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string notr="true">4</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.cpp
index 1a09ac0d..7ed54f02 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.cpp
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.cpp
@@ -72,7 +72,7 @@ void IconThemePage::loadTheme(const QString &path){
config.endGroup();
QIcon icon1 = findIcon(path, 24, "document-save");
QIcon icon2 = findIcon(path, 24, "document-print");
- QIcon icon3 = findIcon(path, 24, "media-playback-stop");
+ QIcon icon3 = findIcon(path, 24, "document-edit");
QTreeWidgetItem *item = new QTreeWidgetItem();
item->setIcon(0, icon1);
item->setIcon(1, icon2);
@@ -97,7 +97,7 @@ QIcon IconThemePage::findIcon(const QString &themePath, int size, const QString
config.endGroup();
foreach (QString dir, dirs){
config.beginGroup(dir);
- if(config.value("Size").toInt() == size){
+ if(config.value("Size").toInt() == size || config.value("Type").toString().toLower()=="scalable"){
QDir iconDir = QFileInfo(themePath).path() + "/" + dir;
iconDir.setFilter(QDir::Files);
iconDir.setNameFilters(QStringList () << name + ".*");
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.cpp
index fdeb8966..cb491aa6 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.cpp
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.cpp
@@ -8,6 +8,19 @@
#include <QDebug>
+QStringList lthemeengine::readFile(QString filepath){
+ QStringList out;
+ QFile file(filepath);
+ if(file.open(QIODevice::Text | QIODevice::ReadOnly)){
+ QTextStream in(&file);
+ while(!in.atEnd()){
+ out << in.readLine();
+ }
+ file.close();
+ }
+ return out;
+}
+
QString lthemeengine::configPath(){
return QDir::homePath() + "/.config/lthemeengine/";
}
@@ -53,6 +66,20 @@ QStringList lthemeengine::sharedStyleSheetPath(){
return dirs;
}
+QString lthemeengine::userDesktopStyleSheetPath(){
+ return configPath() + "desktop_qss/";
+}
+
+QStringList lthemeengine::sharedDesktopStyleSheetPath(){
+ QStringList dirs;
+ dirs << QString(getenv("XDG_CONFIG_HOME"));
+ dirs << QString(getenv("XDG_CONFIG_DIRS")).split(":");
+ dirs << QString(getenv("XDG_DATA_DIRS")).split(":");
+ for(int i=0; i<dirs.length(); i++){ dirs[i].append("/lthemeengine/desktop_qss/"); }
+ if(dirs.isEmpty()){ dirs << LTHEMEENGINE_DATADIR"/lthemeengine/desktop_qss/"; } //no XDG settings - use the hardcoded path
+ return dirs;
+ }
+
QString lthemeengine::userColorSchemePath(){
return configPath() + "colors/";
}
@@ -77,3 +104,96 @@ QString lthemeengine::systemLanguageID(){
#endif
return QLocale::system().name();
}
+
+QStringList lthemeengine::availableSystemCursors(){ //returns: [name] for each item
+ //Find all the directories which could contain themes
+ QStringList paths;
+ paths << QDir::homePath()+"/.icons";
+ QStringList xdd = QString(getenv("XDG_DATA_HOME")).split(":");
+ xdd << QString(getenv("XDG_DATA_DIRS")).split(":");
+ for(int i=0; i<xdd.length(); i++){
+ if(QFile::exists(xdd[i]+"/icons")){
+ paths << xdd[i]+"/icons";
+ }
+ }
+ //Now get all the icon themes in these directories
+ QStringList themes, tmpthemes;
+ QDir dir;
+ for(int i=0; i<paths.length(); i++){
+ if(dir.cd(paths[i])){
+ tmpthemes = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name);
+ for(int j=0; j<tmpthemes.length(); j++){
+ if(tmpthemes[j].startsWith("default")){ continue; }
+ if( QFile::exists(dir.absoluteFilePath(tmpthemes[j]+"/cursors")) ){ themes << tmpthemes[j]; }
+ }
+ }
+ }
+ //Clean up the list and return
+ themes.removeDuplicates();
+ themes.sort();
+ return themes;
+}
+
+//Return the currently-selected Cursor theme
+QString lthemeengine::currentCursor(){
+ //qDebug() << "Reading Current Cursor Theme:";
+ QStringList info = readFile(QDir::homePath()+"/.icons/default/index.theme");
+ if(info.isEmpty()){ return ""; }
+ QString cursor;
+ bool insection = false;
+ for(int i=0; i<info.length(); i++){
+ if(info[i]=="[Icon Theme]"){ insection = true; continue;}
+ else if(insection && info[i].startsWith("Inherits=")){
+ cursor = info[i].section("=",1,1).simplified();
+ break;
+ }
+ }
+ //qDebug() << " - found theme:" << cursor;
+ return cursor;
+}
+
+//Change the current Cursor Theme
+bool lthemeengine::setCursorTheme(QString cursorname){
+//qDebug() << "Set Cursor Theme:" << cursorname;
+ if(cursorname=="default"){
+ //special case - this will cause a recursive inheritance loop - just remove the file instead
+ if(QFile::exists(QDir::homePath()+"/.icons/default/index.theme")){
+ return QFile::remove(QDir::homePath()+"/.icons/default/index.theme");
+ }
+ return true; //already does not exist
+ }
+ QStringList info = readFile(QDir::homePath()+"/.icons/default/index.theme");
+ bool insection = false;
+ bool changed = false;
+ QString newval = "Inherits="+cursorname;
+ for(int i=0; i<info.length() && !changed; i++){
+ if(info[i]=="[Icon Theme]"){
+ insection = true;
+ }else if( info[i].startsWith("[") && insection){
+ //Section does not have the setting - add it
+ info.insert(i, newval);
+ changed =true;
+ }else if( info[i].startsWith("[") ){
+ insection = false;
+ }else if(insection && info[i].startsWith("Inherits=")){
+ info[i] = newval; //replace the current setting
+ changed = true;
+ }
+ } //end loop over file contents
+ if(!changed){ //Could not change the file contents for some reason
+ if(insection){ info << newval; } //end of file while in the section
+ else{ info << "[Icon Theme]" << newval; } //entire section missing from file
+ }
+ //Now save the file
+ QFile file(QDir::homePath()+"/.icons/default/index.theme");
+ bool ok = false;
+ if( file.open(QIODevice::WriteOnly | QIODevice::Truncate) ){
+ QTextStream out(&file);
+ out << info.join("\n");
+ if(!info.last().isEmpty()){ out << "\n"; } //always end with a new line
+ file.close();
+ ok = true;
+ }
+ //qDebug() << "Done saving the cursor:" << info;
+ return ok;
+}
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.desktop b/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.desktop
index 7eb91bee..9d36fffa 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.desktop
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.desktop
@@ -1,6 +1,6 @@
[Desktop Entry]
X-Desktop-File-Install-Version=0.11
-Name=Lumine Theme Engine
+Name=Lumina Theme Engine
Comment=Lumina Theme Engine
Exec=lthemeengine
Icon=preferences-desktop-theme
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.h
index 8a466ed9..c1b6eac6 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.h
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.h
@@ -16,14 +16,22 @@
class lthemeengine
{
public:
+ static QStringList readFile(QString path);
static QString configPath();
static QString configFile();
static QStringList iconPaths();
static QString userStyleSheetPath();
static QStringList sharedStyleSheetPath();
+ static QString userDesktopStyleSheetPath();
+ static QStringList sharedDesktopStyleSheetPath();
static QString userColorSchemePath();
static QStringList sharedColorSchemePath();
static QString systemLanguageID();
+ //Cursor Theme Management
+ static QStringList availableSystemCursors();
+ static QString currentCursor();
+ static bool setCursorTheme(QString);
+
private:
lthemeengine() {}
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.pro b/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.pro
index 721b8888..cc949ff9 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.pro
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.pro
@@ -16,7 +16,8 @@ SOURCES += \
interfacepage.cpp \
fontconfigdialog.cpp \
qsspage.cpp \
- qsseditordialog.cpp
+ qsseditordialog.cpp \
+ cursorthemepage.cpp
FORMS += \
mainwindow.ui \
@@ -28,7 +29,8 @@ FORMS += \
fontconfigdialog.ui \
previewform.ui \
qsspage.ui \
- qsseditordialog.ui
+ qsseditordialog.ui \
+ cursorthemepage.ui
HEADERS += \
mainwindow.h \
@@ -41,7 +43,8 @@ HEADERS += \
interfacepage.h \
fontconfigdialog.h \
qsspage.h \
- qsseditordialog.h
+ qsseditordialog.h \
+ cursorthemepage.h
DEFINES += USE_WIDGETS
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.cpp
index 719a0f49..d4544c7b 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.cpp
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.cpp
@@ -1,23 +1,37 @@
#include <QApplication>
#include <QSettings>
+#include <QDebug>
+#include <QTimer>
+
#include "lthemeengine.h"
#include "mainwindow.h"
#include "appearancepage.h"
#include "fontspage.h"
#include "iconthemepage.h"
+#include "cursorthemepage.h"
#include "interfacepage.h"
#include "qsspage.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QWidget(parent), m_ui(new Ui::MainWindow){
m_ui->setupUi(this);
- m_ui->tabWidget->addTab(new AppearancePage(this), tr("Appearance"));
- m_ui->tabWidget->addTab(new FontsPage(this), tr("Fonts"));
- m_ui->tabWidget->addTab(new IconThemePage(this), tr("Icon Theme"));
- m_ui->tabWidget->addTab(new InterfacePage(this), tr("Interface"));
-#ifdef USE_WIDGETS
- m_ui->tabWidget->addTab(new QSSPage(this), tr("Style Sheets"));
-#endif
+ bgroup = new QButtonGroup(this);
+ bgroup->setExclusive(true);
+ //Clear out any pages in the stacked widget
+ while(m_ui->stackedWidget->count()>0){
+ m_ui->stackedWidget->removeWidget(m_ui->stackedWidget->widget(0));
+ }
+ //Now add all the pages into the widget
+ bgroup->addButton(m_ui->tool_page_general, m_ui->stackedWidget->addWidget(new AppearancePage(this)) );
+ bgroup->addButton(m_ui->tool_page_effects, m_ui->stackedWidget->addWidget(new InterfacePage(this)));
+ bgroup->addButton(m_ui->tool_page_fonts, m_ui->stackedWidget->addWidget(new FontsPage(this)));
+ bgroup->addButton(m_ui->tool_page_icons, m_ui->stackedWidget->addWidget(new IconThemePage(this)));
+ bgroup->addButton(m_ui->tool_page_styles, m_ui->stackedWidget->addWidget(new QSSPage(this, false)));
+ bgroup->addButton(m_ui->tool_page_deskstyles, m_ui->stackedWidget->addWidget(new QSSPage(this, true)));
+ bgroup->addButton(m_ui->tool_page_cursors, m_ui->stackedWidget->addWidget(new CursorThemePage(this)) );
+ connect(bgroup, SIGNAL(buttonClicked(int)), m_ui->stackedWidget, SLOT(setCurrentIndex(int)) );
+
+ QTimer::singleShot(10, m_ui->tool_page_general, SLOT(toggle()));
QSettings settings(lthemeengine::configFile(), QSettings::IniFormat);
restoreGeometry(settings.value("SettingsWindow/geometry").toByteArray());
setWindowIcon(QIcon::fromTheme("preferences-desktop-theme"));
@@ -36,8 +50,8 @@ void MainWindow::closeEvent(QCloseEvent *){
void MainWindow::on_buttonBox_clicked(QAbstractButton *button){
int id = m_ui->buttonBox->standardButton(button);
if(id == QDialogButtonBox::Ok || id == QDialogButtonBox::Apply){
- for(int i = 0; i < m_ui->tabWidget->count(); ++i){
- TabPage *p = qobject_cast<TabPage*>(m_ui->tabWidget->widget(i));
+ for(int i = 0; i < m_ui->stackedWidget->count(); ++i){
+ TabPage *p = qobject_cast<TabPage*>(m_ui->stackedWidget->widget(i));
if(p) { p->writeSettings(); }
}
}
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.h
index 749949a6..56ff1c98 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.h
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.h
@@ -2,8 +2,9 @@
#define MAINWINDOW_H
#include <QWidget>
-
-class QAbstractButton;
+#include <QAbstractButton>
+#include <QButtonGroup>
+//class QAbstractButton;
namespace Ui {
class MainWindow;
@@ -24,6 +25,7 @@ private:
void closeEvent(QCloseEvent *);
Ui::MainWindow *m_ui;
+ QButtonGroup *bgroup;
};
#endif // MAINWINDOW_H
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.ui b/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.ui
index 5bdab6d7..dd676c37 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.ui
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.ui
@@ -6,14 +6,14 @@
<rect>
<x>0</x>
<y>0</y>
- <width>438</width>
- <height>374</height>
+ <width>672</width>
+ <height>723</height>
</rect>
</property>
<property name="windowTitle">
<string>Qt5 Configuration Tool</string>
</property>
- <layout class="QGridLayout" name="gridLayout">
+ <layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>6</number>
</property>
@@ -23,22 +23,281 @@
<property name="bottomMargin">
<number>6</number>
</property>
- <item row="0" column="0" colspan="2">
- <widget class="QTabWidget" name="tabWidget"/>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="versionLabel">
- <property name="text">
- <string notr="true">...</string>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="spacing">
+ <number>4</number>
</property>
- </widget>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QToolButton" name="tool_page_general">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>General</string>
+ </property>
+ <property name="icon">
+ <iconset theme="preferences-desktop-theme">
+ <normaloff>.</normaloff>.</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="toolButtonStyle">
+ <enum>Qt::ToolButtonTextUnderIcon</enum>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="tool_page_effects">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Effects</string>
+ </property>
+ <property name="icon">
+ <iconset theme="preferences-desktop-display">
+ <normaloff>.</normaloff>.</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="toolButtonStyle">
+ <enum>Qt::ToolButtonTextUnderIcon</enum>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="tool_page_fonts">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Fonts</string>
+ </property>
+ <property name="icon">
+ <iconset theme="preferences-desktop-font">
+ <normaloff>.</normaloff>.</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="toolButtonStyle">
+ <enum>Qt::ToolButtonTextUnderIcon</enum>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="tool_page_icons">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Icons</string>
+ </property>
+ <property name="icon">
+ <iconset theme="preferences-desktop-icons">
+ <normaloff>.</normaloff>.</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="toolButtonStyle">
+ <enum>Qt::ToolButtonTextUnderIcon</enum>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="tool_page_cursors">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Cursors</string>
+ </property>
+ <property name="icon">
+ <iconset theme="preferences-desktop-mouse">
+ <normaloff>.</normaloff>.</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="toolButtonStyle">
+ <enum>Qt::ToolButtonTextUnderIcon</enum>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="tool_page_styles">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>General
+Styles</string>
+ </property>
+ <property name="icon">
+ <iconset theme="preferences-system-windows">
+ <normaloff>.</normaloff>.</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="toolButtonStyle">
+ <enum>Qt::ToolButtonTextUnderIcon</enum>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="tool_page_deskstyles">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Desktop
+Styles</string>
+ </property>
+ <property name="icon">
+ <iconset theme="preferences-desktop">
+ <normaloff>.</normaloff>.</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="toolButtonStyle">
+ <enum>Qt::ToolButtonTextUnderIcon</enum>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QStackedWidget" name="stackedWidget">
+ <property name="frameShape">
+ <enum>QFrame::Box</enum>
+ </property>
+ <widget class="QWidget" name="page"/>
+ </widget>
+ </item>
+ </layout>
</item>
- <item row="1" column="1">
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="standardButtons">
- <set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
- </property>
- </widget>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="versionLabel">
+ <property name="text">
+ <string notr="true">...</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
</item>
</layout>
</widget>
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.cpp
index 2cf0f221..cd88fb56 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.cpp
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.cpp
@@ -4,6 +4,9 @@
#include <QMessageBox>
#include <QFile>
#include <QMenu>
+#include <QDebug>
+#include <QTimer>
+
#include "lthemeengine.h"
#include "qsseditordialog.h"
#include "qsspage.h"
@@ -12,8 +15,9 @@
#define QSS_FULL_PATH_ROLE (Qt::ItemDataRole(Qt::UserRole))
#define QSS_WRITABLE_ROLE (Qt::ItemDataRole(Qt::UserRole + 1))
-QSSPage::QSSPage(QWidget *parent) : TabPage(parent), m_ui(new Ui::QSSPage){
+QSSPage::QSSPage(QWidget *parent, bool desktop) : TabPage(parent), m_ui(new Ui::QSSPage){
m_ui->setupUi(this);
+ desktop_qss = desktop;
QDir("/").mkpath(lthemeengine::userStyleSheetPath());
m_menu = new QMenu(this);
m_menu->addAction(QIcon::fromTheme("accessories-text-editor"), tr("Edit"), this, SLOT(on_editButton_clicked()));
@@ -25,6 +29,8 @@ QSSPage::QSSPage(QWidget *parent) : TabPage(parent), m_ui(new Ui::QSSPage){
m_ui->createButton->setIcon(QIcon::fromTheme("document-new"));
m_ui->editButton->setIcon(QIcon::fromTheme("accessories-text-editor"));
m_ui->removeButton->setIcon(QIcon::fromTheme("edit-delete"));
+ m_ui->tool_enable->setEnabled(false);
+ m_ui->tool_disable->setEnabled(false);
}
QSSPage::~QSSPage(){
@@ -34,14 +40,42 @@ QSSPage::~QSSPage(){
void QSSPage::writeSettings(){
QStringList styleSheets;
QSettings settings(lthemeengine::configFile(), QSettings::IniFormat);
- for(int i = 0; i < m_ui->qssListWidget->count(); ++i){
+ for(int i = m_ui->qssListWidget->count()-1; i>=0; i--){
QListWidgetItem *item = m_ui->qssListWidget->item(i);
- if(item->checkState() == Qt::Checked){ styleSheets << item->data(QSS_FULL_PATH_ROLE).toString(); }
- settings.setValue("Interface/stylesheets", styleSheets);
+ styleSheets << item->data(QSS_FULL_PATH_ROLE).toString();
}
+ if(desktop_qss){ settings.setValue("Interface/desktop_stylesheets", styleSheets); }
+ else{ settings.setValue("Interface/stylesheets", styleSheets); }
}
void QSSPage::on_qssListWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *){
+ if(current!=0){
+ m_ui->list_disabled->clearSelection(); //clear any current selection on the other widget
+ m_ui->list_disabled->setCurrentRow(-1);
+ m_ui->tool_enable->setEnabled(false);
+ }
+ //qDebug() << "Got Current Item Changed";
+ m_ui->tool_disable->setEnabled(current!=0);
+ if(current){
+ m_ui->editButton->setEnabled(current->data(QSS_WRITABLE_ROLE).toBool());
+ m_ui->removeButton->setEnabled(current->data(QSS_WRITABLE_ROLE).toBool());
+ m_ui->renameButton->setEnabled(current->data(QSS_WRITABLE_ROLE).toBool());
+ }
+ else{
+ m_ui->editButton->setEnabled(false);
+ m_ui->removeButton->setEnabled(false);
+ m_ui->renameButton->setEnabled(false);
+ }
+}
+
+void QSSPage::on_list_disabled_currentItemChanged(QListWidgetItem *current, QListWidgetItem *){
+ if(current!=0){
+ m_ui->qssListWidget->clearSelection(); //clear any current selection on the other widget
+ m_ui->qssListWidget->setCurrentRow(-1);
+ m_ui->tool_disable->setEnabled(false);
+ }
+ //qDebug() << "Got Current Item Changed";
+ m_ui->tool_enable->setEnabled(current!=0);
if(current){
m_ui->editButton->setEnabled(current->data(QSS_WRITABLE_ROLE).toBool());
m_ui->removeButton->setEnabled(current->data(QSS_WRITABLE_ROLE).toBool());
@@ -58,26 +92,35 @@ void QSSPage::on_createButton_clicked(){
QString name = QInputDialog::getText(this, tr("Enter Style Sheet Name"), tr("File name:"));
if(name.isEmpty()){ return; }
if(!name.endsWith(".qss", Qt::CaseInsensitive)){ name.append(".qss"); }
- QString filePath = lthemeengine::userStyleSheetPath() + name;
+ QString filePath;
+ if(desktop_qss){ filePath = lthemeengine::userDesktopStyleSheetPath() + name; }
+ else{ filePath = lthemeengine::userStyleSheetPath() + name; }
if(QFile::exists(filePath)){
QMessageBox::warning(this, tr("Error"), tr("The file \"%1\" already exists").arg(filePath));
return;
}
+ // Make sure the directory exists
+ QString dir = filePath.section("/",0,-2);
+ if(!QFile::exists(dir)){
+ QDir D(dir);
+ D.mkpath(dir);
+ }
//creating empty file
QFile file(filePath);
file.open(QIODevice::WriteOnly);
file.close();
//creating item
QFileInfo info(filePath);
- QListWidgetItem *item = new QListWidgetItem(info.fileName(), m_ui->qssListWidget);
+ QListWidgetItem *item = new QListWidgetItem(info.fileName(), m_ui->list_disabled);
item->setToolTip(info.filePath());
item->setData(QSS_FULL_PATH_ROLE, info.filePath());
item->setData(QSS_WRITABLE_ROLE, info.isWritable());
- item->setCheckState(Qt::Unchecked);
+ m_ui->list_disabled->setCurrentRow(m_ui->list_disabled->count()-1);
+ QTimer::singleShot(10, this, SLOT(on_editButton_clicked()) );
}
void QSSPage::on_editButton_clicked(){
- QListWidgetItem *item = m_ui->qssListWidget->currentItem();
+ QListWidgetItem *item = currentSelection();
if(item){
QSSEditorDialog dialog(item->data(QSS_FULL_PATH_ROLE).toString(), this);
dialog.exec();
@@ -85,27 +128,76 @@ void QSSPage::on_editButton_clicked(){
}
void QSSPage::on_removeButton_clicked(){
- QListWidgetItem *item = m_ui->qssListWidget->currentItem();
+ QListWidgetItem *item = currentSelection();
if(!item){ return; }
int button = QMessageBox::question(this, tr("Confirm Remove"),tr("Are you sure you want to remove style sheet \"%1\"?").arg(item->text()), QMessageBox::Yes | QMessageBox::No);
if(button == QMessageBox::Yes){ QFile::remove(item->data(QSS_FULL_PATH_ROLE).toString()); }
delete item;
}
+void QSSPage::on_tool_enable_clicked(){
+ QList<QListWidgetItem*> sel = m_ui->list_disabled->selectedItems();
+ //qDebug() << "Got Selection:" << sel.count();
+ for(int i=0; i<sel.length(); i++){
+ m_ui->qssListWidget->addItem(sel[i]->clone());
+ delete sel[i];
+ //QCoreApplication::processEvents();
+ m_ui->qssListWidget->setCurrentRow(m_ui->qssListWidget->count()-1);
+ }
+
+}
+
+void QSSPage::on_tool_disable_clicked(){
+ QList<QListWidgetItem*> sel = m_ui->qssListWidget->selectedItems();
+ //qDebug() << "Got Selection:" << sel.count();
+ for(int i=0; i<sel.length(); i++){
+ m_ui->list_disabled->addItem(sel[i]->clone());
+ delete sel[i];
+ //QCoreApplication::processEvents();
+ m_ui->list_disabled->setCurrentRow(m_ui->list_disabled->count()-1);
+ }
+}
+
+void QSSPage::on_tool_priority_up_clicked(){
+ QList<QListWidgetItem*> sel = m_ui->qssListWidget->selectedItems();
+ for(int i=0; i<sel.length(); i++){
+ int index = m_ui->qssListWidget->row(sel[i]);
+ //qDebug() << "Move Item Up:" << index;
+ if(index>0){
+ m_ui->qssListWidget->insertItem(index-1, m_ui->qssListWidget->takeItem(index));
+ m_ui->qssListWidget->setCurrentRow(index-1);
+ }
+ }
+}
+
+void QSSPage::on_tool_priority_down_clicked(){
+ QList<QListWidgetItem*> sel = m_ui->qssListWidget->selectedItems();
+ for(int i=0; i<sel.length(); i++){
+ int index = m_ui->qssListWidget->row(sel[i]);
+ //qDebug() << "Move Item Down:" << index;
+ if(index<(m_ui->qssListWidget->count()-1) ){
+ m_ui->qssListWidget->insertItem(index+1, m_ui->qssListWidget->takeItem(index));
+ m_ui->qssListWidget->setCurrentRow(index+1);
+ }
+ }
+}
+
void QSSPage::readSettings(){
//load stylesheets
m_ui->qssListWidget->clear();
- findStyleSheets(QStringList() << lthemeengine::userStyleSheetPath() << lthemeengine::sharedStyleSheetPath());
+ m_ui->list_disabled->clear();
+ //Read the currently-enabled settings
QSettings settings(lthemeengine::configFile(), QSettings::IniFormat);
- QStringList styleSheets = settings.value("Interface/stylesheets").toStringList();
- for(int i = 0; i < m_ui->qssListWidget->count(); ++i){
- QListWidgetItem *item = m_ui->qssListWidget->item(i);
- if(styleSheets.contains(item->data(QSS_FULL_PATH_ROLE).toString())){ item->setCheckState(Qt::Checked); }
- else { item->setCheckState(Qt::Unchecked); }
- }
+ QStringList styleSheets;
+ if(desktop_qss){ styleSheets = settings.value("Interface/desktop_stylesheets").toStringList(); }
+ else{ styleSheets = settings.value("Interface/stylesheets").toStringList(); }
+ //Now load the items into list widgets
+ if(desktop_qss){ findStyleSheets(QStringList() << lthemeengine::userDesktopStyleSheetPath() << lthemeengine::sharedDesktopStyleSheetPath(), styleSheets); }
+ else{findStyleSheets(QStringList() << lthemeengine::userStyleSheetPath() << lthemeengine::sharedStyleSheetPath(), styleSheets); }
+
}
-void QSSPage::findStyleSheets(QStringList paths){
+void QSSPage::findStyleSheets(QStringList paths, QStringList enabled){
paths.removeDuplicates();
for(int i=0; i<paths.length(); i++){
if(!QFile::exists(paths[i])){ continue; }
@@ -113,20 +205,30 @@ void QSSPage::findStyleSheets(QStringList paths){
dir.setFilter(QDir::Files);
dir.setNameFilters(QStringList() << "*.qss");
foreach (QFileInfo info, dir.entryInfoList()){
- QListWidgetItem *item = new QListWidgetItem(info.fileName(), m_ui->qssListWidget);
+ QListWidgetItem *item = new QListWidgetItem(info.fileName());
item->setToolTip(info.filePath());
item->setData(QSS_FULL_PATH_ROLE, info.filePath());
item->setData(QSS_WRITABLE_ROLE, info.isWritable());
+ if( enabled.contains(info.filePath()) ){ m_ui->qssListWidget->addItem(item); }
+ else{ m_ui->list_disabled->addItem(item); }
}
}
+ //Now ensure the priority of the items in the active list is correct
+ for(int i = 0; i < m_ui->qssListWidget->count(); ++i){
+ QListWidgetItem *item = m_ui->qssListWidget->item(i);
+ int index = enabled.indexOf( item->data(QSS_FULL_PATH_ROLE).toString() );
+ if(index>=0){ m_ui->qssListWidget->insertItem(index, item); }// item->move(m_ui->qssListWidget->count() - 1 - index); }
+ }
+ m_ui->list_disabled->sortItems(Qt::AscendingOrder);
+
}
void QSSPage::on_renameButton_clicked(){
- QListWidgetItem *item = m_ui->qssListWidget->currentItem();
+ QListWidgetItem *item = currentSelection();
if(!item){ return; }
QString name = QInputDialog::getText(this, tr("Rename Style Sheet"), tr("Style sheet name:"), QLineEdit::Normal, item->text(), 0);
if(name.isEmpty()){ return; }
- if(!m_ui->qssListWidget->findItems(name, Qt::MatchExactly).isEmpty()){
+ if(!m_ui->qssListWidget->findItems(name, Qt::MatchExactly).isEmpty() || !m_ui->list_disabled->findItems(name, Qt::MatchExactly).isEmpty()){
QMessageBox::warning(this, tr("Error"), tr("The style sheet \"%1\" already exists").arg(name));
return;
}
@@ -145,3 +247,9 @@ void QSSPage::on_qssListWidget_customContextMenuRequested(const QPoint &pos){
QListWidgetItem *item = m_ui->qssListWidget->currentItem();
if(item && item->data(QSS_WRITABLE_ROLE).toBool()){ m_menu->exec(m_ui->qssListWidget->viewport()->mapToGlobal(pos)); }
}
+
+QListWidgetItem* QSSPage::currentSelection(){
+ QListWidgetItem *item = m_ui->qssListWidget->currentItem();
+ if(item==0){ item = m_ui->list_disabled->currentItem(); }
+ return item;
+}
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.h
index 5e924ad9..5b0025c5 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.h
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.h
@@ -15,24 +15,33 @@ class QSSPage : public TabPage
Q_OBJECT
public:
- explicit QSSPage(QWidget *parent = 0);
+ explicit QSSPage(QWidget *parent = 0, bool desktop = false);
~QSSPage();
void writeSettings();
private slots:
void on_qssListWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *);
+ void on_list_disabled_currentItemChanged(QListWidgetItem *current, QListWidgetItem *);
void on_createButton_clicked();
void on_editButton_clicked();
void on_removeButton_clicked();
void on_renameButton_clicked();
void on_qssListWidget_customContextMenuRequested(const QPoint &pos);
+ void on_tool_enable_clicked();
+ void on_tool_disable_clicked();
+ void on_tool_priority_up_clicked();
+ void on_tool_priority_down_clicked();
+
private:
void readSettings();
- void findStyleSheets(QStringList paths);
+ void findStyleSheets(QStringList paths, QStringList enabled);
Ui::QSSPage *m_ui;
QMenu *m_menu;
+ bool desktop_qss;
+
+ QListWidgetItem* currentSelection();
};
#endif // QSSPAGE_H
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.ui b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.ui
index 124b4dc6..f9a980f3 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.ui
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.ui
@@ -13,69 +13,264 @@
<property name="windowTitle">
<string notr="true">Style Sheet Editor</string>
</property>
- <layout class="QGridLayout" name="gridLayout">
- <item row="1" column="0">
- <widget class="QPushButton" name="createButton">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="text">
- <string>Create</string>
- </property>
- </widget>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <widget class="QToolButton" name="tool_priority_up">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Increase Priority</string>
+ </property>
+ <property name="text">
+ <string notr="true"/>
+ </property>
+ <property name="icon">
+ <iconset theme="arrow-up">
+ <normaloff>.</normaloff>.</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="tool_priority_down">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Decrease priority of style</string>
+ </property>
+ <property name="text">
+ <string notr="true"/>
+ </property>
+ <property name="icon">
+ <iconset theme="arrow-down">
+ <normaloff>.</normaloff>.</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QToolButton" name="tool_disable">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Disable Style</string>
+ </property>
+ <property name="text">
+ <string>Disable</string>
+ </property>
+ <property name="icon">
+ <iconset theme="arrow-right">
+ <normaloff>.</normaloff>.</iconset>
+ </property>
+ <property name="toolButtonStyle">
+ <enum>Qt::ToolButtonTextBesideIcon</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="font">
+ <font>
+ <italic>true</italic>
+ </font>
+ </property>
+ <property name="text">
+ <string>Enabled</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QListWidget" name="qssListWidget">
+ <property name="contextMenuPolicy">
+ <enum>Qt::CustomContextMenu</enum>
+ </property>
+ <property name="alternatingRowColors">
+ <bool>false</bool>
+ </property>
+ <property name="resizeMode">
+ <enum>QListView::Fixed</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="Line" name="line">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QToolButton" name="tool_enable">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Enable</string>
+ </property>
+ <property name="icon">
+ <iconset theme="arrow-left">
+ <normaloff>.</normaloff>.</iconset>
+ </property>
+ <property name="toolButtonStyle">
+ <enum>Qt::ToolButtonTextBesideIcon</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_3">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_2">
+ <property name="font">
+ <font>
+ <italic>true</italic>
+ </font>
+ </property>
+ <property name="text">
+ <string>Available</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QListWidget" name="list_disabled"/>
+ </item>
+ </layout>
+ </item>
+ </layout>
</item>
- <item row="1" column="3">
- <widget class="QPushButton" name="removeButton">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Remove</string>
- </property>
- </widget>
- </item>
- <item row="1" column="5">
- <spacer name="horizontalSpacer">
+ <item>
+ <widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>189</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="0" column="0" colspan="6">
- <widget class="QListWidget" name="qssListWidget">
- <property name="contextMenuPolicy">
- <enum>Qt::CustomContextMenu</enum>
- </property>
- <property name="alternatingRowColors">
- <bool>true</bool>
- </property>
</widget>
</item>
- <item row="1" column="1">
- <widget class="QPushButton" name="editButton">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Edit</string>
- </property>
- </widget>
- </item>
- <item row="1" column="2">
- <widget class="QPushButton" name="renameButton">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Rename</string>
- </property>
- </widget>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QPushButton" name="createButton">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Create</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="editButton">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Edit</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="renameButton">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Rename</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="removeButton">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Remove</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>189</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
</item>
</layout>
</widget>
bgstack15