Don't use GtkPaned when the sidebar is hidden.

This works around what seems to be a bug in Gtk: Hiding the sidebar
created a dead region (for touchscreens)
in which the GtkPaned eats horizontal gestures.
upstream-master
Henry Heino 5 years ago committed by Roland Lötscher
parent a0dbd934da
commit 725c6cf569
  1. 51
      src/gui/MainWindow.cpp
  2. 7
      src/gui/MainWindow.h
  3. 267
      ui/main.glade

@ -40,6 +40,15 @@ MainWindow::MainWindow(GladeSearchpath* gladeSearchPath, Control* control):
this->toolbarWidgets = new GtkWidget*[TOOLBAR_DEFINITIONS_LEN];
this->toolbarSelectMenu = new MainWindowToolbarMenu(this);
panedContainerWidget = GTK_WIDGET(get("panelMainContents"));
boxContainerWidget = GTK_WIDGET(get("mainContentContainer"));
mainContentWidget = GTK_WIDGET(get("boxContents"));
sidebarWidget = GTK_WIDGET(get("sidebar"));
g_object_ref(panedContainerWidget);
g_object_ref(boxContainerWidget);
g_object_ref(mainContentWidget);
g_object_ref(sidebarWidget);
loadMainCSS(gladeSearchPath, "xournalpp.css");
GtkOverlay* overlay = GTK_OVERLAY(get("mainOverlay"));
@ -220,6 +229,11 @@ MainWindow::~MainWindow() {
delete scrollHandling;
scrollHandling = nullptr;
g_object_unref(panedContainerWidget);
g_object_unref(boxContainerWidget);
g_object_unref(mainContentWidget);
g_object_unref(sidebarWidget);
}
/**
@ -463,6 +477,11 @@ void MainWindow::updateScrollbarSidebarPosition() {
!control->getSettings()->isScrollbarFadeoutDisabled());
}
// If the sidebar isn't visible, we can't change its position!
if (!this->sidebarVisible) {
return;
}
GtkWidget* sidebar = get("sidebar");
GtkWidget* boxContents = get("boxContents");
@ -527,18 +546,36 @@ auto MainWindow::deleteEventCallback(GtkWidget* widget, GdkEvent* event, Control
void MainWindow::setSidebarVisible(bool visible) {
Settings* settings = control->getSettings();
GtkWidget* sidebar = get("sidebar");
GtkWidget* panel = get("panelMainContents");
gtk_widget_set_visible(sidebar, visible);
settings->setSidebarVisible(visible);
if (!visible && (control->getSidebar() != nullptr)) {
saveSidebarSize();
}
if (visible != this->sidebarVisible) {
// Due to a GTK bug, we can't just hide the sidebar widget in the GtkPaned.
// If we do this, we create a dead region where the pane separator was previously.
// In this region, we can't use the touchscreen to start horizontal strokes.
// As such:
if (!visible) {
gtk_container_remove(GTK_CONTAINER(panedContainerWidget), mainContentWidget);
gtk_container_remove(GTK_CONTAINER(boxContainerWidget), GTK_WIDGET(panedContainerWidget));
gtk_container_add(GTK_CONTAINER(boxContainerWidget), mainContentWidget);
this->sidebarVisible = false;
} else {
gtk_container_remove(GTK_CONTAINER(boxContainerWidget), mainContentWidget);
gtk_container_add(GTK_CONTAINER(panedContainerWidget), mainContentWidget);
gtk_container_add(GTK_CONTAINER(boxContainerWidget), GTK_WIDGET(panedContainerWidget));
this->sidebarVisible = true;
updateScrollbarSidebarPosition();
}
}
gtk_widget_set_visible(sidebarWidget, visible);
if (visible) {
gtk_paned_set_position(GTK_PANED(panel), settings->getSidebarWidth());
gtk_paned_set_position(GTK_PANED(panedContainerWidget), settings->getSidebarWidth());
}
GtkWidget* w = get("menuViewSidebarVisible");
@ -561,9 +598,7 @@ void MainWindow::setToolbarVisible(bool visible) {
}
void MainWindow::saveSidebarSize() {
GtkWidget* panel = get("panelMainContents");
this->control->getSettings()->setSidebarWidth(gtk_paned_get_position(GTK_PANED(panel)));
this->control->getSettings()->setSidebarWidth(gtk_paned_get_position(GTK_PANED(panedContainerWidget)));
}
void MainWindow::setMaximized(bool maximized) { this->maximized = maximized; }

@ -187,4 +187,11 @@ private:
MainWindowToolbarMenu* toolbarSelectMenu;
GtkAccelGroup* globalAccelGroup;
bool sidebarVisible = true;
GtkWidget* boxContainerWidget;
GtkWidget* panedContainerWidget;
GtkWidget* mainContentWidget;
GtkWidget* sidebarWidget;
};

@ -2102,97 +2102,61 @@
</packing>
</child>
<child>
<object class="GtkPaned" id="panelMainContents">
<property name="name">panelMainContents</property>
<object class="GtkBox" id="mainContentContainer">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="sidebar">
<property name="name">sidebar</property>
<object class="GtkPaned" id="panelMainContents">
<property name="name">panelMainContents</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<object class="GtkBox" id="sidebar">
<property name="name">sidebar</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkToolbar" id="tbSelectSidebarPage">
<property name="name">tbSelectSidebarPage</property>
<object class="GtkBox" id="bxSidebarTopActions">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="buttonCloseSidebar">
<property name="name">buttonCloseSidebar</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="relief">none</property>
<child>
<object class="GtkImage" id="image8">
<object class="GtkToolbar" id="tbSelectSidebarPage">
<property name="name">tbSelectSidebarPage</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-close</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<style>
<class name="raised"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="sidebarContents">
<property name="name">sidebarContents</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkButton" id="btUp">
<property name="name">btUp</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="margin-left">2</property>
<child>
<object class="GtkImage" id="image1">
<object class="GtkButton" id="buttonCloseSidebar">
<property name="name">buttonCloseSidebar</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-go-up</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="relief">none</property>
<child>
<object class="GtkImage" id="image8">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-close</property>
</object>
</child>
<style>
<class name="raised"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
@ -2202,99 +2166,146 @@
</packing>
</child>
<child>
<object class="GtkButton" id="btDown">
<property name="name">btDown</property>
<object class="GtkBox" id="sidebarContents">
<property name="name">sidebarContents</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkImage" id="image5">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-go-down</property>
</object>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btCopy">
<property name="name">btCopy</property>
<object class="GtkBox" id="box2">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkImage" id="image6">
<object class="GtkButton" id="btUp">
<property name="name">btUp</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-copy</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<child>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-go-up</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btDelete">
<property name="name">btDelete</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<child>
<object class="GtkImage" id="image7">
<object class="GtkButton" id="btDown">
<property name="name">btDown</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-delete</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<child>
<object class="GtkImage" id="image5">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-go-down</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btCopy">
<property name="name">btCopy</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<child>
<object class="GtkImage" id="image6">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-copy</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btDelete">
<property name="name">btDelete</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<child>
<object class="GtkImage" id="image7">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-delete</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
<property name="padding">2</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">2</property>
<property name="position">3</property>
<property name="resize">False</property>
<property name="shrink">False</property>
</packing>
</child>
</object>
<packing>
<property name="resize">False</property>
<property name="shrink">False</property>
</packing>
</child>
<child>
<object class="GtkBox" id="boxContents">
<property name="name">boxContents</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
<object class="GtkBox" id="boxContents">
<property name="name">boxContents</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
</packing>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
<property name="position">3</property>
</packing>
</child>
<child>

Loading…
Cancel
Save