From 66eb5fc4f45f2e522bf59c1fef9f6f06616a566f Mon Sep 17 00:00:00 2001 From: yw4z Date: Fri, 24 Apr 2026 11:51:00 +0300 Subject: [PATCH] Add option to place window buttons on left side for Linux (#12831) init --- src/libslic3r/AppConfig.cpp | 5 +++++ src/slic3r/GUI/BBLTopbar.cpp | 34 +++++++++++++++++++++++++++++++++- src/slic3r/GUI/Preferences.cpp | 5 +++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index af785e6515..68ea971424 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -523,6 +523,11 @@ void AppConfig::set_defaults() set_bool("installed_networking", false); } +#ifdef __linux__ + if (get("window_buttons_on_left").empty()) + set_bool("window_buttons_on_left", false); +#endif + // Remove legacy window positions/sizes erase("app", "main_frame_maximized"); erase("app", "main_frame_pos"); diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 5722d26bec..cd25556317 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -236,7 +236,37 @@ void BBLTopbar::Init(wxFrame* parent) wxInitAllImageHandlers(); - this->AddSpacer(5); + bool window_btns_on_left = false; + +#ifdef __linux__ + window_btns_on_left = wxGetApp().app_config->get("window_buttons_on_left") == "true"; + + if(window_btns_on_left){ + wxBitmap close_bitmap = create_scaled_bitmap("topbar_close", nullptr, TOPBAR_ICON_SIZE); + wxAuiToolBarItem* close_btn = this->AddTool(wxID_CLOSE_FRAME, "", close_bitmap); + + this->AddSpacer(FromDIP(4)); + + maximize_bitmap = create_scaled_bitmap("topbar_max", nullptr, TOPBAR_ICON_SIZE); + window_bitmap = create_scaled_bitmap("topbar_win", nullptr, TOPBAR_ICON_SIZE); + if (m_frame->IsMaximized()) { + maximize_btn = this->AddTool(wxID_MAXIMIZE_FRAME, "", window_bitmap); + } + else { + maximize_btn = this->AddTool(wxID_MAXIMIZE_FRAME, "", maximize_bitmap); + } + + this->AddSpacer(FromDIP(4)); + + wxBitmap iconize_bitmap = create_scaled_bitmap("topbar_min", nullptr, TOPBAR_ICON_SIZE); + wxAuiToolBarItem* iconize_btn = this->AddTool(wxID_ICONIZE_FRAME, "", iconize_bitmap); + + this->AddSpacer(15); + } +#endif + + if(!window_btns_on_left) + this->AddSpacer(5); /*wxBitmap logo_bitmap = create_scaled_bitmap("topbar_logo", nullptr, TOPBAR_ICON_SIZE); wxAuiToolBarItem* logo_item = this->AddTool(ID_LOGO, "", logo_bitmap); @@ -312,6 +342,7 @@ void BBLTopbar::Init(wxFrame* parent) //this->AddSeparator(); //this->AddSpacer(FromDIP(4)); + if(!window_btns_on_left){ wxBitmap iconize_bitmap = create_scaled_bitmap("topbar_min", nullptr, TOPBAR_ICON_SIZE); wxAuiToolBarItem* iconize_btn = this->AddTool(wxID_ICONIZE_FRAME, "", iconize_bitmap); @@ -330,6 +361,7 @@ void BBLTopbar::Init(wxFrame* parent) wxBitmap close_bitmap = create_scaled_bitmap("topbar_close", nullptr, TOPBAR_ICON_SIZE); wxAuiToolBarItem* close_btn = this->AddTool(wxID_CLOSE_FRAME, "", close_bitmap); + } Realize(); // m_toolbar_h = this->GetSize().GetHeight(); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 42fa277cc3..2774f6fcd7 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -1360,6 +1360,11 @@ void PreferencesDialog::create_items() auto item_show_splash_scr = create_item_checkbox(_L("Show splash screen"), _L("Show the splash screen during startup."), "show_splash_screen"); g_sizer->Add(item_show_splash_scr); +#ifdef __linux__ + auto item_window_button_pos = create_item_checkbox(_L("Use window buttons on left side"), "", "window_buttons_on_left", _L("(Requires restart)")); + g_sizer->Add(item_window_button_pos); +#endif + //auto item_hints = create_item_checkbox(_L("Show \"Daily Tips\" after start"), page, _L("If enabled, useful hints are displayed at startup."), "show_daily_tips"); //g_sizer->Add(item_hints);