Add support for change dock position

This commit is contained in:
daleclack 2023-01-09 14:40:21 +08:00
parent 4f2694df74
commit 69972c3078
3 changed files with 226 additions and 185 deletions

View File

@ -2,6 +2,162 @@
<!-- Generated with glade 3.40.0 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">My_GtkUI</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image10">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">audacious_whitesur</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image11">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">file-app</property>
</object>
<object class="GtkImage" id="image12">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">my_textedit</property>
</object>
<object class="GtkImage" id="image13">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">game</property>
</object>
<object class="GtkImage" id="image14">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">image_app</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image15">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">my_textedit</property>
</object>
<object class="GtkImage" id="image16">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">my_textedit</property>
</object>
<object class="GtkImage" id="image17">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">vlc_whitesur</property>
</object>
<object class="GtkImage" id="image18">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">vlc_whitesur</property>
</object>
<object class="GtkImage" id="image19">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">myrunner</property>
</object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">drawing_app</property>
</object>
<object class="GtkImage" id="image20">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">my_prefs</property>
</object>
<object class="GtkImage" id="image21">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">my_trash</property>
</object>
<object class="GtkImage" id="image22">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">24game</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image23">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">24game</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image24">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">calcapp</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image25">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">calcapp</property>
</object>
<object class="GtkImage" id="image26">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">mines_app</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image27">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">mines_app</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">file-app</property>
</object>
<object class="GtkImage" id="image4">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">game</property>
</object>
<object class="GtkImage" id="image5">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">my_textedit</property>
</object>
<object class="GtkImage" id="image6">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">image_app</property>
</object>
<object class="GtkImage" id="image7">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">my_prefs</property>
</object>
<object class="GtkBox" id="dock_box">
<property name="width-request">54</property>
<property name="visible">True</property>
@ -38,7 +194,7 @@
</packing>
</child>
<child>
<object class="GtkSeparator">
<object class="GtkSeparator" id="separator_2">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
@ -49,20 +205,16 @@
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="width-request">52</property>
<property name="height-request">340</property>
<object class="GtkScrolledWindow" id="icons_sw">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="vexpand">True</property>
<property name="hscrollbar-policy">never</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkBox">
<object class="GtkBox" id="icons_box">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
@ -237,7 +389,7 @@
<placeholder/>
</child>
<child>
<object class="GtkSeparator">
<object class="GtkSeparator" id="separator_3">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
@ -283,162 +435,6 @@
<placeholder/>
</child>
</object>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">My_GtkUI</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image10">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">audacious_whitesur</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image11">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">file-app</property>
</object>
<object class="GtkImage" id="image12">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">my_textedit</property>
</object>
<object class="GtkImage" id="image13">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">game</property>
</object>
<object class="GtkImage" id="image14">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">image_app</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image15">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">my_textedit</property>
</object>
<object class="GtkImage" id="image16">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">my_textedit</property>
</object>
<object class="GtkImage" id="image17">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">vlc_whitesur</property>
</object>
<object class="GtkImage" id="image18">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">vlc_whitesur</property>
</object>
<object class="GtkImage" id="image19">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">myrunner</property>
</object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">drawing_app</property>
</object>
<object class="GtkImage" id="image20">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">my_prefs</property>
</object>
<object class="GtkImage" id="image21">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">my_trash</property>
</object>
<object class="GtkImage" id="image22">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">24game</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image23">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">24game</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image24">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">calcapp</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image25">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">calcapp</property>
</object>
<object class="GtkImage" id="image26">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">mines_app</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image27">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">mines_app</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">file-app</property>
</object>
<object class="GtkImage" id="image4">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">game</property>
</object>
<object class="GtkImage" id="image5">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">my_textedit</property>
</object>
<object class="GtkImage" id="image6">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">image_app</property>
</object>
<object class="GtkImage" id="image7">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">my_prefs</property>
</object>
<object class="GtkImage" id="image8">
<property name="visible">True</property>
<property name="can-focus">False</property>
@ -1012,7 +1008,24 @@
</packing>
</child>
<child>
<placeholder/>
<object class="GtkBox" id="dock_bottom">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</interface>

View File

@ -15,6 +15,8 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
ref_builder->get_widget("dock_box", dock_box);
ref_builder->get_widget("dock_left", dock_left);
ref_builder->get_widget("dock_right", dock_right);
ref_builder->get_widget("dock_bottom", dock_bottom);
ref_builder->get_widget("icons_box", icons_box);
ref_builder->get_widget("btnlaunch", btnlaunch);
ref_builder->get_widget("btndraw", btndraw);
ref_builder->get_widget("btnfiles", btnfiles);
@ -26,7 +28,10 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
ref_builder->get_widget("btncalc", btncalc);
ref_builder->get_widget("btnmine", btnmine);
ref_builder->get_widget("separator_start", separator_start);
ref_builder->get_widget("separator_2", separator_2);
ref_builder->get_widget("separator_3", separator_3);
ref_builder->get_widget("separator_end", separator_end);
ref_builder->get_widget("icons_sw", icons_sw);
ref_builder->get_widget("launchpad_stack", launchpad_stack);
ref_builder->get_widget("default_page", default_page);
ref_builder->get_widget("launchpad_page", launchpad_page);
@ -122,6 +127,37 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
apply_style(*separator_end);
// apps_grid->foreach(sigc::mem_fun(*this,&MyDock::apply_style));
// Set dock position
// The dock can be positioned at the left, right and the bottom of the window
auto dock_pos = prefs_win.get_dock_pos();
switch (dock_pos)
{
case DockPos::POS_LEFT:
// Set the default size of scrolled window
icons_sw->set_size_request(52, 340);
icons_sw->set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
dock_left->pack_start(*dock_box);
break;
case DockPos::POS_RIGHT:
// Set the default size of scrolled window
icons_sw->set_size_request(52, 340);
icons_sw->set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
dock_right->pack_start(*dock_box);
break;
case DockPos::POS_BOTTOM:
// Change Orientation before pack
dock_box->set_orientation(Gtk::ORIENTATION_HORIZONTAL);
icons_box->set_orientation(Gtk::ORIENTATION_HORIZONTAL);
// Set the default size of scrolled window
icons_sw->set_size_request(340, 52);
icons_sw->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_NEVER);
// Pack dock to the position
dock_bottom->pack_start(*dock_box);
break;
default:
dock_right->pack_start(*dock_box);
}
// Set Dock or panel mode
switch (mode1)
{
@ -130,28 +166,19 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
// std::cout << "dock mode" << std::endl;
break;
case DockMode::MODE_PANEL:
dock_box->set_vexpand();
dock_box->set_valign(Gtk::ALIGN_FILL);
if(dock_pos == DockPos::POS_BOTTOM){
dock_box->set_hexpand();
dock_box->set_halign(Gtk::ALIGN_FILL);
icons_sw->set_hexpand();
}else{
dock_box->set_vexpand();
dock_box->set_valign(Gtk::ALIGN_FILL);
icons_sw->set_vexpand();
}
// std::cout << "panel mode" << std::endl;
break;
}
// Set dock position
// The dock can be positioned at the left, right and the bottom of the window
auto dock_pos = prefs_win.get_dock_pos();
switch (dock_pos)
{
case DockPos::POS_LEFT:
dock_left->pack_start(*dock_box);
break;
case DockPos::POS_RIGHT:
dock_right->pack_start(*dock_box);
break;
case DockPos::POS_BOTTOM:
default:
dock_right->pack_start(*dock_box);
}
show_all_children();
}

View File

@ -24,10 +24,11 @@ public:
private:
// Child widgets
Gtk::Box *finder_box, *dock_box, *dock_left, *dock_right;
Gtk::Box *finder_box, *dock_box, *dock_left, *dock_right, *dock_bottom, *icons_box;
Gtk::Button *btnlaunch, *btndraw, *btnfiles, *btncalc,
*btngame, *btnedit, *btnimage, *btnset, *btngame24, *btnmine;
Gtk::Separator *separator_start, *separator_end;
Gtk::Separator *separator_start, *separator_2, *separator_3, *separator_end;
Gtk::ScrolledWindow *icons_sw;
// Finder
MyFinder finder;