Merge pull request #1324 from HeyPuter/dynamic-toolbar

Dynamic toolbar
This commit is contained in:
Nariman Jelveh
2025-06-30 16:53:35 -07:00
committed by GitHub
44 changed files with 287 additions and 306 deletions

View File

@@ -600,15 +600,9 @@ const ipc_listener = async (event, handled) => {
// Show menubar
let $menubar;
if(window.menubar_style === 'window'){
$menubar = $(el_window).find('.window-menubar')
// add window-with-menubar class to the window
$(el_window).addClass('window-with-menubar');
}else{
$menubar = $('.window-menubar-global[data-window-id="'+$(el_window).attr('data-id')+'"]');
// hide all other menubars
$('.window-menubar-global').hide();
}
$menubar = $(el_window).find('.window-menubar')
// add window-with-menubar class to the window
$(el_window).addClass('window-with-menubar');
$menubar.css('display', 'flex');

View File

@@ -48,33 +48,7 @@ export default {
<option value="show">${i18n('clock_visible_show')}</option>
</select>
</div>
<div class="settings-card" style="display: block; height: auto;">
<strong style="margin: 15px 0 30px; display: block;">${i18n('menubar_style')}</strong>
<div style="flex-grow:1; margin-top: 10px;">
<div>
<label style="display:inline;" for="menubar_style_system">
<input type="radio" name="menubar_style" class="menubar_style" value="system" id="menubar_style_system">
<strong>${i18n('menubar_style_system')}</strong>
<p style="margin-left: 17px; margin-top: 5px; margin-bottom: 20px;">Set the menubar based on the host system settings</p>
</label>
</div>
<div>
<label style="display:inline;" for="menubar_style_desktop">
<input type="radio" name="menubar_style" class="menubar_style" value="desktop" id="menubar_style_desktop">
<strong>${i18n('menubar_style_desktop')}</strong>
<p style="margin-left: 17px; margin-top: 5px; margin-bottom: 20px;">Show app menubar on in the desktop toolbar</p>
</label>
</div>
<div>
<label style="display:inline;" for="menubar_style_window">
<input type="radio" name="menubar_style" class="menubar_style" value="window" id="menubar_style_window">
<strong>${i18n('menubar_style_window')}</strong>
<p style="margin-left: 17px; margin-top: 5px; margin-bottom: 20px;">Show app menubar on top of the app window</p>
</label>
</div>
</div>
</div>`;
`;
},
init: ($el_window) => {
$el_window.find('.change-ui-colors').on('click', function (e) {
@@ -101,60 +75,5 @@ export default {
});
window.change_clock_visible();
puter.kv.get('menubar_style').then(async (val) => {
if(val === 'system' || !val){
$el_window.find('#menubar_style_system').prop('checked', true);
}else if(val === 'desktop'){
$el_window.find('#menubar_style_desktop').prop('checked', true);
}
else if(val === 'window'){
$el_window.find('#menubar_style_window').prop('checked', true);
}
})
$el_window.find('.menubar_style').on('change', function (e) {
let value = $(this).val();
if(value === 'system' || value === 'desktop' || value === 'window'){
// save the new style to cloud kv
puter.kv.set('menubar_style', value);
if(value === 'system'){
if(window.detectHostOS() === 'macos')
value = 'desktop';
else
value = 'window';
}
// apply the new style
if(value === 'desktop'){
$('body').addClass('menubar-style-desktop');
$('.window-menubar').each((_, el) => {
$(el).insertAfter('.toolbar-puter-logo');
// add window-menubar-global
$(el).addClass('window-menubar-global');
// remove window-with-menubar from the window
let win_id = $(el).attr('data-window-id');
$('.window[data-id="'+win_id+'"]').removeClass('window-with-menubar');
// hide
$(el).hide();
})
}else{
$('body').removeClass('menubar-style-desktop');
$('.window-menubar-global').each((_, el) => {
let win_id = $(el).attr('data-window-id');
$(el).insertAfter('.window[data-id="'+win_id+'"] .window-head');
// remove window-menubar-global
$(el).removeClass('window-menubar-global');
// add window-with-menubar to the window
$('.window[data-id="'+win_id+'"]').addClass('window-with-menubar');
// show
$(el).css('display', 'flex');
})
}
window.menubar_style = value;
}else{
console.error('Invalid menubar style value');
}
})
},
};

View File

@@ -706,35 +706,6 @@ async function UIDesktop(options) {
puter.kv.get("sidebar_items").then(async (val) => {
window.sidebar_items = val;
})
// also update every 2 seconds
// setInterval(async () => {
// puter.kv.get("sidebar_items").then(async (val) => {
// window.sidebar_items = val;
// })
// }, 2000);
// Get menubar style
puter.kv.get('menubar_style').then(async (val) => {
let value = val;
if (value === 'system' || value === 'desktop' || value === 'window') {
window.menubar_style = value;
} else {
window.menubar_style = 'system';
}
if (window.menubar_style === 'system') {
if (window.detectHostOS() === 'macos')
window.menubar_style = 'desktop';
else
window.menubar_style = 'window';
}
// set menubar style class to body
if (window.menubar_style === 'desktop') {
$('body').addClass('menubar-style-desktop');
}
})
// Remove `?ref=...` from navbar URL
if (window.url_query_params.has('ref')) {
@@ -1145,10 +1116,21 @@ async function UIDesktop(options) {
});
}
// ----------------------------------------------------
// User options
// Toolbar
// ----------------------------------------------------
// Has user seen the toolbar animation?
window.has_seen_toolbar_animation = await puter.kv.get('has_seen_toolbar_animation') ?? false;
let ht = '';
ht += `<div class="toolbar" style="height:${window.toolbar_height}px; min-height:${window.toolbar_height}px; max-height:${window.toolbar_height}px;">`;
let style = '';
let class_name = '';
if(window.has_seen_toolbar_animation){
style = 'top: -20px; width: 40px;';
class_name = 'toolbar-hidden';
}else
style= 'height:30px; min-height:30px; max-height:30px;';
ht += `<div class="toolbar ${class_name}" style="${style}">`;
// logo
ht += `<div class="toolbar-btn toolbar-puter-logo" title="Puter" style="margin-left: 10px;"><img src="${window.icons['logo-white.svg']}" draggable="false" style="display:block; width:17px; height:17px"></div>`;
@@ -1392,7 +1374,6 @@ async function UIDesktop(options) {
}
const stat = await puter.fs.stat(item_path);
console.log('stat result', stat);
// TODO: DRY everything here with open_item. Unfortunately we can't
// use open_item here because it's coupled with UI logic;
@@ -1467,6 +1448,230 @@ async function UIDesktop(options) {
app: 'explorer',
});
}
window.hide_toolbar = (animate = true) => {
if ($('.toolbar').hasClass('toolbar-hidden')) return;
// attach hidden class to toolbar
$('.toolbar').addClass('toolbar-hidden');
// animate the toolbar to top = -20px;
// animate width to 40px;
if (animate) {
$('.toolbar').animate({
top: '-20px',
width: '40px',
}, 100);
} else {
$('.toolbar').css({
top: '-20px',
width: '40px',
});
}
// animate hide toolbar-btn, toolbar-clock
if (animate) {
$('.toolbar-btn, #clock, .user-options-menu-btn').animate({
opacity: 0,
}, 10);
} else {
$('.toolbar-btn, #clock, .user-options-menu-btn').css({
opacity: 0,
});
}
if(!window.has_seen_toolbar_animation){
puter.kv.set({
key: "has_seen_toolbar_animation",
value: true,
})
window.has_seen_toolbar_animation = true;
}
}
window.show_toolbar = () => {
if (!$('.toolbar').hasClass('toolbar-hidden')) return;
// remove hidden class from toolbar
$('.toolbar').removeClass('toolbar-hidden');
$('.toolbar').animate({
top: 0,
}, 100).css('width', 'fit-content');
// animate show toolbar-btn, toolbar-clock
$('.toolbar-btn, #clock, .user-options-menu-btn').animate({
opacity: 0.8,
}, 50);
}
// Toolbar hide/show logic with improved UX
let toolbarHideTimeout = null;
let isMouseNearToolbar = false;
// Define safe zone around toolbar (in pixels)
const TOOLBAR_SAFE_ZONE = 30;
const TOOLBAR_HIDE_DELAY = 100; // Base delay before hiding
const TOOLBAR_QUICK_HIDE_DELAY = 200; // Quicker hide when mouse moves far away
// Function to check if mouse is in the safe zone around toolbar
window.isMouseInToolbarSafeZone = (mouseX, mouseY) => {
const toolbar = $('.toolbar')[0];
if (!toolbar) return false;
const rect = toolbar.getBoundingClientRect();
// Expand the toolbar bounds by the safe zone
const safeZone = {
top: rect.top - TOOLBAR_SAFE_ZONE,
bottom: rect.bottom + TOOLBAR_SAFE_ZONE,
left: rect.left - TOOLBAR_SAFE_ZONE,
right: rect.right + TOOLBAR_SAFE_ZONE
};
return mouseX >= safeZone.left &&
mouseX <= safeZone.right &&
mouseY >= safeZone.top &&
mouseY <= safeZone.bottom;
};
// Function to handle toolbar hiding with improved logic
window.handleToolbarHiding = (mouseX, mouseY) => {
// Clear any existing timeout
if (toolbarHideTimeout) {
clearTimeout(toolbarHideTimeout);
toolbarHideTimeout = null;
}
// Don't hide if toolbar is already hidden
if ($('.toolbar').hasClass('toolbar-hidden')) return;
const wasNearToolbar = isMouseNearToolbar;
isMouseNearToolbar = window.isMouseInToolbarSafeZone(mouseX, mouseY);
// If mouse is in safe zone, don't hide
if (isMouseNearToolbar) {
return;
}
// Determine hide delay based on mouse movement pattern
let hideDelay = TOOLBAR_HIDE_DELAY;
// If mouse was previously near toolbar and now moved far away, hide quicker
if (wasNearToolbar && !isMouseNearToolbar) {
// Check if mouse moved significantly away
const toolbar = $('.toolbar')[0];
if (toolbar) {
const rect = toolbar.getBoundingClientRect();
const distanceFromToolbar = Math.min(
Math.abs(mouseY - rect.bottom),
Math.abs(mouseY - rect.top)
);
// If mouse is far from toolbar, hide quicker
if (distanceFromToolbar > TOOLBAR_SAFE_ZONE * 2) {
hideDelay = TOOLBAR_QUICK_HIDE_DELAY;
}
}
}
// Set timeout to hide toolbar
toolbarHideTimeout = setTimeout(() => {
// Double-check mouse position before hiding
if (!window.isMouseInToolbarSafeZone(window.mouseX, window.mouseY)) {
window.hide_toolbar();
}
toolbarHideTimeout = null;
}, hideDelay);
};
// hovering over a hidden toolbar will show it
$(document).on('mouseenter', '.toolbar-hidden', function () {
// if a window is being dragged, don't show the toolbar
if(window.a_window_is_being_dragged)
return;
if(window.is_fullpage_mode)
$('.window-app-iframe').css('pointer-events', 'none');
window.show_toolbar();
// Clear any pending hide timeout
if (toolbarHideTimeout) {
clearTimeout(toolbarHideTimeout);
toolbarHideTimeout = null;
}
});
// hovering over a visible toolbar will show it and cancel hiding
$(document).on('mouseenter', '.toolbar:not(.toolbar-hidden)', function () {
// if a window is being dragged, don't show the toolbar
if(window.a_window_is_being_dragged)
return;
// Clear any pending hide timeout when entering toolbar
if (toolbarHideTimeout) {
clearTimeout(toolbarHideTimeout);
toolbarHideTimeout = null;
}
isMouseNearToolbar = true;
});
$(document).on('mouseenter', '.toolbar', function () {
if(window.is_fullpage_mode)
$('.toolbar').focus();
});
// any click will hide the toolbar, unless:
// - it's on the toolbar
// - it's the user options menu button
// - the user options menu is open
$(document).on('click', function(e){
// if the user has not seen the toolbar animation, don't hide the toolbar
if(!window.has_seen_toolbar_animation)
return;
if(
!$(e.target).hasClass('toolbar') &&
!$(e.target).hasClass('user-options-menu-btn') &&
$('.context-menu[data-id="user-options-menu"]').length === 0 &&
true
){
window.hide_toolbar(false);
}
})
// Handle mouse leaving the toolbar
$(document).on('mouseleave', '.toolbar', function () {
window.has_left_toolbar_at_least_once = true;
// if the user options menu is open, don't hide the toolbar
if ($('.context-menu[data-id="user-options-menu"]').length > 0)
return;
// Start the hiding logic with current mouse position
window.handleToolbarHiding(window.mouseX, window.mouseY);
});
// Track mouse movement globally to update toolbar hiding logic
$(document).on('mousemove', function(e) {
// if the user has not seen the toolbar animation, don't hide the toolbar
if(!window.has_seen_toolbar_animation && !window.has_left_toolbar_at_least_once)
return;
// if the user options menu is open, don't hide the toolbar
if ($('.context-menu[data-id="user-options-menu"]').length > 0)
return;
// Only handle toolbar hiding if toolbar is visible and mouse moved significantly
if (!$('.toolbar').hasClass('toolbar-hidden')) {
// Use throttling to avoid excessive calls
if (!window.mouseMoveThrottle) {
window.mouseMoveThrottle = setTimeout(() => {
window.handleToolbarHiding(window.mouseX, window.mouseY);
window.mouseMoveThrottle = null;
}, 100); // Throttle to every 100ms
}
}
});
}
$(document).on('contextmenu taphold', '.taskbar', function (event) {

View File

@@ -302,11 +302,7 @@ async function UIWindow(options) {
}
// Menubar
if(window.menubar_style === 'window'){
h += `<div class="window-menubar" data-window-id="${win_id}"></div>`;
}else if(window.menubar_style === 'desktop'){
$('.toolbar-puter-logo').after(`<div class="window-menubar window-menubar-global" data-window-id="${win_id}"></div>`);
}
h += `<div class="window-menubar" data-window-id="${win_id}"></div>`;
// Navbar
if(options.is_dir){
@@ -1640,6 +1636,7 @@ async function UIWindow(options) {
$(el_window).draggable({
start: function(e, ui){
window.a_window_is_being_dragged = true;
// if window is snapped, unsnap it and reset its position to where it was before snapping
if(options.is_resizable && window_is_snapped){
window_is_snapped = false;
@@ -1802,6 +1799,7 @@ async function UIWindow(options) {
}
},
stop: function () {
window.a_window_is_being_dragged = false;
let window_will_snap = false;
$( el_window ).draggable( "option", "cursorAt", false );
@@ -3305,6 +3303,9 @@ window.scale_window = (el_window)=>{
'height': height,
'transform': 'none',
});
// hide toolbar
window.hide_toolbar();
}
//shrink
else {

View File

@@ -1348,6 +1348,10 @@ span.header-sort-icon img {
height: calc(100%);
}
.fullpage-mode.device-desktop .window-body-app {
height: calc(100% );
}
.window-filedialog-prompt {
height: 60px;
border-top: 1px solid #dbdee3;
@@ -1742,9 +1746,11 @@ label {
font-size: 14px;
}
/***********************************
* Toolbar
***********************************/
.toolbar {
float: right;
width: 100%;
background-color: #00000040;
height: 30px;
position: relative;
@@ -1755,7 +1761,24 @@ label {
justify-content: flex-end;
align-content: center;
flex-wrap: wrap;
padding-right: 10px
padding-right: 10px;
left: 50%;
right: 50%;
left: 50%;
transform: translate(-50%);
top: 0px;
border-top-right-radius: 0px;
border-top-left-radius: 0px;
border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;
width: fit-content;
overflow: clip;
box-shadow: rgb(255 255 255 / 14%) 0px 0px 0px 0.5px inset, rgba(0, 0, 0, 0.2) 0px 0px 0px 0.5px, rgba(0, 0, 0, 0.2) 0px 2px 14px;
}
.toolbar-hidden {
box-shadow: rgb(255 255 255 / 44%) 0px 0px 0px 0.5px inset, rgba(0, 0, 0, 0.2) 0px 0px 0px 0.5px, rgba(0, 0, 0, 0.2) 0px 2px 14px;
}
.show-desktop-btn {
@@ -1807,7 +1830,11 @@ label {
}
.toolbar-btn:hover {
opacity: 1;
opacity: 1 !important;
}
.toolbar-hidden .toolbar-btn {
opacity: 0;
}
.user-options-menu-btn.has-open-contextmenu {
@@ -1837,21 +1864,7 @@ label {
background-color: rgb(255 255 255 / 15%);
border-radius: 3px;
}
.logout-btn {
position: absolute;
right: 7px;
top: 7px;
padding: 4px;
border-radius: 4px;
cursor: pointer;
border: 2px solid #CCC;
}
.logout-btn img {
width: 20px;
margin-bottom: -5px;
}
/***************************************************/
.login-error-msg, .signup-error-msg, .publish-website-error-msg, .form-error-msg {
display: none;

View File

@@ -103,7 +103,7 @@ if (window.user_preferences === null) {
}
window.window_stack = []
window.toolbar_height = 30;
window.toolbar_height = 0;
window.default_taskbar_height = 50;
window.taskbar_height = window.default_taskbar_height;
window.upload_progress_hide_delay = 500;
@@ -256,11 +256,4 @@ window.reset_item_positions = true; // The variable decides if the item position
window.file_templates = []
// default language
window.locale = 'en';
/* Menubar style
* 'window' - menubar is part of the window
* 'desktop' - menubar is part of the desktop
* 'system' - menubar is determined by the system (e.g. Windows, macOS)
*/
// window.menubar_style = 'desktop';
window.locale = 'en';

View File

@@ -175,10 +175,6 @@ const ar = {
log_out: "تسجيل الخروج",
looks_good: "يبدو جيدًا!",
manage_sessions: "إدارة الجلسات",
menubar_style: "نمط شريط القوائم",
menubar_style_desktop: "سطح المكتب",
menubar_style_system: "النظام",
menubar_style_window: "النافذة",
modified: "تم التعديل",
move: "نقل",
moving_file: "جارٍ نقل %%",

View File

@@ -161,10 +161,6 @@ const bn = {
log_out: "লগ আউট",
looks_good: "ভাল দেখা যাচ্ছে!",
manage_sessions: "সেশন পরিচালনা করুন",
menubar_style: "মেনুবার স্টাইল",
menubar_style_desktop: "ডেস্কটপ মেনুবার স্টাইল",
menubar_style_system: "সিস্টেম",
menubar_style_window: "উইন্ডো",
modified: "পরিবর্তিত",
move: "চলুন",
moving_file: "ফাইল চলার পথে %%",

View File

@@ -162,10 +162,6 @@ const br = {
log_out: 'Sair',
looks_good: "Parece bom!",
manage_sessions: "Gerenciar Sessões",
menubar_style: "Estilo da Barra de Menus",
menubar_style_desktop: "Área de Trabalho",
menubar_style_system: "Sistema",
menubar_style_window: "Janela",
modified: 'Modificado',
move: 'Mover',
moving_file: "Movendo %%",

View File

@@ -161,10 +161,6 @@ const da = {
log_out: 'Log ud',
looks_good: 'Ser godt ud!',
manage_sessions: 'Administrer sessioner',
menubar_style: 'Menubjælke stil',
menubar_style_desktop: 'Skrivebord',
menubar_style_system: 'System',
menubar_style_window: 'Vindue',
modified: 'Ændret',
move: 'Flyt',
moving_file: 'Flytter %%',

View File

@@ -161,10 +161,6 @@ const de = {
log_out: 'Abmelden',
looks_good: "Sieht gut aus!",
manage_sessions: "Sitzungen verwalten",
menubar_style: "Menüleisten-Stil",
menubar_style_desktop: "Desktop",
menubar_style_system: "System",
menubar_style_window: "Fenster",
modified: 'Geändert',
move: 'Verschieben',
moving_file: "Verschiebe %%",

View File

@@ -167,10 +167,6 @@ const en = {
log_out: 'Log Out',
looks_good: "Looks good!",
manage_sessions: "Manage Sessions",
menubar_style: "Menubar Style",
menubar_style_desktop: "Desktop",
menubar_style_system: "System",
menubar_style_window: "Window",
modified: 'Modified',
move: 'Move',
moving_file: "Moving %%",

View File

@@ -185,10 +185,6 @@ const es = {
log_out: 'Cerrar sesión',
looks_good: 'Se ve bien!',
manage_sessions: 'Administrar sesión',
menubar_style: 'Estilo de la barra de menú',
menubar_style_desktop: 'Escritorio',
menubar_style_system: 'Sistema',
menubar_style_window: 'Ventana',
modified: 'Modified',
move: 'Mover',
moving_file: 'Moviendo %%',

View File

@@ -180,10 +180,6 @@ const fa = {
log_out: "خروج",
looks_good: "خوب به نظر می‌رسد!",
manage_sessions: "مدیریت نشست‌ها",
menubar_style: "سبک نوار منو",
menubar_style_desktop: "دسکتاپ",
menubar_style_system: "سیستم",
menubar_style_window: "پنجره",
modified: "تغییر داده شده",
move: "انتقال",
moving_file: "انتقال %%",

View File

@@ -210,10 +210,6 @@ const fi = {
log_out: "Kirjaudu ulos",
looks_good: "Näyttää hyvältä!",
manage_sessions: "Hallitse istuntoja",
menubar_style: "Valikkopalkin tyyli",
menubar_style_desktop: "Työpöytä",
menubar_style_system: "Järjestelmä",
menubar_style_window: "Ikkuna",
modified: "Muokattu",
move: "Siirrä",
moving_file: "Siirretään %%",

View File

@@ -161,10 +161,6 @@ const fr = {
log_out: 'Se déconnecter',
looks_good: "Ça a l'air bien !",
manage_sessions: "Gérer les sessions",
menubar_style: "Style barre de menu",
menubar_style_desktop: "Bureau",
menubar_style_system: "Système",
menubar_style_window: "Fenêtre",
modified: 'Modifié',
move: 'Déplacer',
moving_file: "Déplacement de %%",

View File

@@ -172,10 +172,6 @@ const en = {
log_out: "התנתק",
looks_good: "נראה טוב!",
manage_sessions: "ניהול ישיבות",
menubar_style: "סגנון שורת התפריט",
menubar_style_desktop: "שולחן העבודה",
menubar_style_system: "מערכת",
menubar_style_window: "חַלוֹן",
modified: "שונה",
move: "לעבור",
moving_file: "מעביר %%",

View File

@@ -161,10 +161,6 @@ const hi = {
log_out: 'लॉग आउट',
looks_good: "अच्छा लग रहा है!",
manage_sessions: "सत्र प्रबंधित करें",
menubar_style: "मेनूबार शैली",
menubar_style_desktop: "डेस्कटॉप",
menubar_style_system: "प्रणाली",
menubar_style_window: "खिड़की",
modified: 'संशोधित',
move: 'बदले',
moving_file: "जा रहे हैं %%",

View File

@@ -157,10 +157,6 @@ const hu = {
log_out: "Kijelentkezés",
looks_good: "Jól néz ki!",
manage_sessions: "Munkamenetek kezelése",
menubar_style: "Menü stílusa",
menubar_style_desktop: "Asztal",
menubar_style_system: "Rendszer",
menubar_style_window: "Ablak",
modified: "Módosítva",
move: "Mozgatás",
moving_file: "Mozgatás: %%",

View File

@@ -161,10 +161,6 @@ const hy = {
log_out: "Դուրս գալ",
looks_good: "Լավ է նայվում!",
manage_sessions: "Սեսիաների կառավարում",
menubar_style: "Մենյուբարի ոճը",
menubar_style_desktop: "Աշխատասեղան",
menubar_style_system: "Համակարգ",
menubar_style_window: "Պատուհան",
modified: "Փոփոխված",
move: "Տեղափոխել",
moving_file: "Տեղափոխվում է %%",

View File

@@ -172,10 +172,6 @@ const id = {
log_out: "Keluar",
looks_good: "Tampak bagus!",
manage_sessions: "Kelola Sesi",
menubar_style: "Gaya Menubar",
menubar_style_desktop: "Desktop",
menubar_style_system: "Sistem",
menubar_style_window: "Jendela",
modified: "Dimodifikasi",
move: "Pindahkan",
moving_file: "Memindahkan %%",

View File

@@ -175,10 +175,6 @@ const ig = {
log_out: "pụọ",
looks_good: "Ọ mara mma!",
manage_sessions: "Jikwaa Oge",
menubar_style: "Ụdị Menubar",
menubar_style_desktop: "Desktọpụ",
menubar_style_system: "Sistemu",
menubar_style_window: "Window",
modified: "gbanwee",
move: "Bugharịa",
moving_file: "Na Bugharịa %%",

View File

@@ -177,10 +177,6 @@ const it = {
log_out: "Disconnettiti",
looks_good: "Sembra buono!",
manage_sessions: "Gestisci le sessioni",
menubar_style: "Stile della barra dei menu",
menubar_style_desktop: "Scrivania",
menubar_style_system: "Sistema",
menubar_style_window: "Finestra",
modified: "Modificato",
move: "Sposta",
moving_file: "Spostamento in corso %%",

View File

@@ -162,10 +162,6 @@ const ja = {
log_out: 'ログアウト',
looks_good: "ナイス!",
manage_sessions: "セッションを管理",
menubar_style: "メニューバースタイル",
menubar_style_desktop: "デスクトップ",
menubar_style_system: "システム",
menubar_style_window: "ウィンドウ",
modified: '変更日時',
move: '移動',
moving_file: "移動中 %%",

View File

@@ -174,10 +174,6 @@ const ko = {
log_out: "로그아웃",
looks_good: "좋아 보입니다!",
manage_sessions: "세션 관리",
menubar_style: "메뉴 표시줄 스타일",
menubar_style_desktop: "바탕화면",
menubar_style_system: "시스템",
menubar_style_window: "윈도우",
modified: "수정한 날짜",
move: "이동",
moving_file: "이동 중 %%",

View File

@@ -178,10 +178,6 @@ const ku = {
log_out: "چوونە دەرەوە",
looks_good: "پەیوەندیدارە!",
manage_sessions: "بەڕێوەبردنی دانیشتنەکان",
menubar_style: "شێوازی منوبار",
menubar_style_desktop: "سەروروومیزی",
menubar_style_system: "سیستەم",
menubar_style_window: "پەنجەرە",
modified: "گۆڕاو",
move: "جوڵاندن",
moving_file: "جوڵاندنەوەی %%",

View File

@@ -163,10 +163,6 @@ const ml = {
log_out: 'ലോഗ്ഔട്ട്',
looks_good: "നന്നായിരിക്കുന്നു!",
manage_sessions: "സെഷനുകൾ കൈകാര്യം ചെയ്യുക",
menubar_style: "മെനുബാർ ശൈലി",
menubar_style_desktop: "ഡെസ്ക്ടോപ്പ്",
menubar_style_system: "സിസ്റ്റം",
menubar_style_window: "വിൻഡോ",
modified: 'പരിഷ്കരിച്ചത്',
move: 'നീക്കുക',
moving_file: "%% നീക്കുന്നു",

View File

@@ -252,10 +252,6 @@ const nb = {
link_copied: "Lenke kopiert",
looks_good: "Ser bra ut!",
manage_sessions: "Administrer økter",
menubar_style: "Menylinjesstil",
menubar_style_desktop: "Skrivebord",
menubar_style_system: "System",
menubar_style_window: "Vindu",
modified: "Endret",
new_email: "Ny e-post",
original_name: "Opprinnelig navn",

View File

@@ -161,10 +161,6 @@ const nl = {
log_out: 'Uitloggen',
looks_good: 'Ziet er goed uit!',
manage_sessions: 'Sessies Beheren',
menubar_style: 'Menubalk Stijl',
menubar_style_desktop: 'Bureaublad',
menubar_style_system: 'Systeem',
menubar_style_window: 'Venster',
mobile_device: 'Mobiel apparaat',
modified: 'Gewijzigd',
move: 'Verplaatsen',

View File

@@ -246,10 +246,6 @@ const nn = {
log_into_another_account_anyway: "Logg inn med ein annan konto likevel",
looks_good: "Ser bra ut!",
manage_sessions: "Handter økter",
menubar_style: "Stil på menylinje",
menubar_styledesktop: "Skrivbord",
menubar_style_system: "System",
menubar_style_window: "Vindauge",
modified: "Endra",
new_email: "Ny e-post",
no: "Nei",

View File

@@ -161,10 +161,6 @@ const pl = {
log_out: 'Wyloguj się',
looks_good: "W porządku!",
manage_sessions: "Zarządzaj sesjami",
menubar_style: "Styl paska menu",
menubar_style_desktop: "Pulpit",
menubar_style_system: "Jak w systemie",
menubar_style_window: "Okno",
modified: 'Zmodyfikowany',
move: 'Przenieś',
moving_file: "Przenoszenie %%",

View File

@@ -163,10 +163,6 @@ const pt = {
log_out: 'Sair',
looks_good: "Looks good!",
manage_sessions: "Gerir Sessões",
menubar_style: "Estilo da Barra de Menu",
menubar_style_desktop: "Desktop",
menubar_style_system: "Sistema",
menubar_style_window: "Window",
modified: 'Modificado',
move: 'Mover',
moving_file: "Movendo %%",

View File

@@ -162,10 +162,6 @@ const ro = {
log_out: 'Deconectează-te',
looks_good: "Arată bine!",
manage_sessions: "Administrează sesiuni",
menubar_style: "Stil bară de meniu",
menubar_style_desktop: "Desktop",
menubar_style_system: "Sistem",
menubar_style_window: "Fereastră",
modified: "Modificat",
move: 'Mută',
moving_file: "Se mută %%",

View File

@@ -178,10 +178,6 @@ const ru = {
log_out: 'Выйти',
looks_good: 'Выглядит здорово!',
manage_sessions: 'Управление Сеансами',
menubar_style: 'Стиль меню',
menubar_style_desktop: 'Рабочий стол',
menubar_style_system: 'Система',
menubar_style_window: 'Окно',
modified: 'Изменено',
move: 'Переместить',
moving_file: 'Перемещаю %%',

View File

@@ -162,10 +162,6 @@ const sv = {
log_out: "Logga ut",
looks_good: "Ser bra ut!",
manage_sessions: "Hantera sessioner",
menubar_style: "Stil för menyraden",
menubar_style_desktop: "Skrivbord",
menubar_style_system: "System",
menubar_style_window: "Fönster",
modified: "Ändrad",
move: "Flytta",
moving_file: "Flyttar %%",

View File

@@ -160,10 +160,6 @@ const ta = {
log_out: 'வெளியேறு',
looks_good: "நன்றாக இருக்கிறது!",
manage_sessions: "அமர்வுகளை நிர்வகிக்கவும்",
menubar_style: "மெனுபார் உடை",
menubar_style_desktop: "டெஸ்க்டாப்",
menubar_style_system: "அமைப்பு",
menubar_style_window: "ஜன்னல்",
modified: 'மாற்றியமைக்கப்பட்டது',
move: 'நகர்வு',
moving_file: "நகரும் %%",

View File

@@ -160,10 +160,6 @@ const th = {
log_out: "ออกจากระบบ",
looks_good: "ดูดีเลย!",
manage_sessions: "จัดการเซสชั่น",
menubar_style: "ไตล์เมนูบาร์",
menubar_style_desktop: "เดสก์ท็อป",
menubar_style_system: "ระบบ",
menubar_style_window: "หน้าต่าง",
modified: 'แก้ไขเเมื่อ',
move: "ย้าย",
moving_file: "กำลังย้าย %%",

View File

@@ -161,10 +161,6 @@ const tr = {
log_out: ıkış Yap",
looks_good: "İyi görünüyor!",
manage_sessions: "Oturumları Yönet",
menubar_style: "Menü Çubuğu Stili",
menubar_style_desktop: "Masaüstü",
menubar_style_system: "Sistem",
menubar_style_window: "Pencere",
modified: "Değiştirilmiş",
move: "Taşı",
moving_file: "%% Taşınıyor",

View File

@@ -164,10 +164,6 @@ const ua = {
log_out: "Вийти",
looks_good: "Гарно виглядає!",
manage_sessions: "Управління Сеансами",
menubar_style: "Стиль Меню",
menubar_style_desktop: "Робочого стола",
menubar_style_system: "Системи",
menubar_style_window: "Вікна",
modified: "Змінено",
move: "Перемістити",
moving_file: "Переміщується %%",

View File

@@ -167,10 +167,6 @@ const ur = {
log_out: "لاگ آؤٹ",
looks_good: "اچھا لگ رہا ہے!",
manage_sessions: "سیشنز کا نظم کریں۔",
menubar_style: "مینو بار اسٹائل",
menubar_style_desktop: "ڈیسک ٹاپ",
menubar_style_system: "سسٹم",
menubar_style_window: "ونڈو",
move: "منتقل کریں",
moving_file: "منتقل ہو رہا ہے %%",
my_websites: "میری ویب سائٹیں ",

View File

@@ -162,10 +162,6 @@ const vi = {
log_out: 'Đăng xuất',
looks_good: "Trông tốt!",
manage_sessions: "Quản lý phiên",
menubar_style: "Kiểu thanh menu",
menubar_style_desktop: "Màn hình chính",
menubar_style_system: "Hệ thống",
menubar_style_window: "Cửa sổ",
modified: 'Đã sửa đổi',
move: 'Di chuyển',
moving_file: "Đang di chuyển %%",

View File

@@ -162,10 +162,6 @@ const zh = {
log_out: '退出',
looks_good: "看起来不错!",
manage_sessions: "会话管理",
menubar_style: "菜单条样式",
menubar_style_desktop: "桌面",
menubar_style_system: "系统",
menubar_style_window: "窗口",
modified: '已修改',
move: '移动',
moving_file: "移动 %%",

View File

@@ -161,10 +161,6 @@ const zhtw = {
log_out: '登出',
looks_good: "看起來不錯!",
manage_sessions: "管理工作階段",
menubar_style: "選單列樣式",
menubar_style_desktop: "桌面",
menubar_style_system: "系統",
menubar_style_window: "視窗",
modified: '已修改',
move: '移動',
moving_file: "正在移動 %%",

View File

@@ -1232,9 +1232,13 @@ window.initgui = async function(options){
//--------------------------------------------------------
$(document).on('mousedown', function(e){
// if taskbar or any parts of it is clicked, drop the event
if($(e.target).hasClass('taskbar') || $(e.target).closest('.taskbar').length > 0)
if($(e.target).hasClass('taskbar') || $(e.target).closest('.taskbar').length > 0){
return;
}
// if toolbar or any parts of it is clicked, drop the event
if($(e.target).hasClass('toolbar') || $(e.target).closest('.toolbar').length > 0){
return;
}
// if mouse is clicked on a window, activate it
if(window.mouseover_window !== undefined){
// if popover clicked on, don't activate window. This is because if an app