More questions about statusbar menu

Daniel xracoonx at gmx.de
Thu Sep 8 05:45:52 UTC 2022


On 2022-09-08 07:15, Daniel wrote:
> On 2022-09-05 12:36, Jean-Marc Lasgouttes wrote:
>> Le 05/09/2022 à 12:26, Jean-Marc Lasgouttes a écrit :
>>>> Do as you see fit.
>>>
>>> I did, but I have more questions now.
>>
>> PS: I realize that I should have read tickets #12182 and #12187 before 
>> posting point 3/. I do not want to initiate an endless discussion 
>> about these things :) It is just that I noticed this while looking at 
>> the statistics thing.
>>>
>>> 3/ The contextual menu is a weird merge of what LibreOffice and MS 
>>> Office do:
>>>    * LO: each element has its menu, the zoom menu has example values 
>>> to set (fit width, fit page, 50%, 75%, etc.), no way to tell which 
>>> statistics should be there
>>>    * MSO: only one menu with checkboxes to indicate which elements 
>>> should be shown, no way to tell which statistics should be there, no 
>>> way to set zoom from menu
>>>    * LyX one menu that does both selection of elements and zooming, 
>>> zoom in/out and reset to default (main use IMO is to learn 
>>> shortcuts), weird-looking precomputed zoom values
>>>
>>> I understand that splitting the menu would make zoom menu unavailable 
>>> when both count and slider are off; some solution would be needed if 
>>> splitting the menus. OTOH I am not sure that the zoom menu is useful, 
>>> except maybe for the reset to default, which is not available via a 
>>> mouse click. In this respect, I like the Firefox approach, where 
>>> clicking on the zoom indicator resets zoom to default.
> 
> I don't remember that splitting menus was suggested yet at #12182 and 
> #12187. (Feel free to ignore my comment otherwise.) I seem to remember 
> that I suggested the whole status bar menu originally. Back then, there 
> were was only zoom options which made it rather unproblematic to show 
> zoom stuff on there. But now that more options were added (and probably 
> not the last ones), I agree that it should be split up. Further zoom 
> options are available in both Word and Writer by pressing the zoom 
> value. I suggest we just use the same (standard) mechanism. Stopping 
> short of creating a dialog, I suggest to just show a menu as in the 
> attached patch.
> 
> (By the way, setting 100% zoom to be actual zoom as suggested elsewhere 
> might partly help with the number strangeness - at least as long as the 
> default zoom is not changed.)

Sorry, slightly improved version attached. (The pressed signal was 
previously also emitted on right click which interfered with the context 
menu event.)

Daniel
-------------- next part --------------
From c5daa4cbb8c1c2191ab07877d70820572ebbf2af Mon Sep 17 00:00:00 2001
From: Daniel Ramoeller <d.lyx at web.de>
Date: Thu, 8 Sep 2022 07:44:15 +0200
Subject: [PATCH] Disentangle status bar and zoom menu

- Moves the zoom menu to the zoom value
---
 lib/ui/stdcontext.inc                  |  9 +++++++--
 src/frontends/qt/GuiClickableLabel.cpp |  7 ++++++-
 src/frontends/qt/GuiClickableLabel.h   |  2 ++
 src/frontends/qt/GuiView.cpp           | 14 ++++++++++++--
 src/frontends/qt/GuiView.h             |  4 +++-
 5 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/lib/ui/stdcontext.inc b/lib/ui/stdcontext.inc
index eb44a58f30..b9a23040c6 100644
--- a/lib/ui/stdcontext.inc
+++ b/lib/ui/stdcontext.inc
@@ -723,12 +723,17 @@ Menuset
 		Item "Giant-sized Icons" "icon-size giant"
 	End
 
+#
+# Status bar zoom context menu
+#
+	Menu "context-zoom"
+		ZoomOptions
+	End
+
 #
 # Status bar context menu
 #
 	Menu "context-statusbar"
-		ZoomOptions
-		Separator
 		Item "Zoom Level|Z" "ui-toggle zoomlevel"
 		Item "Zoom Slider|S" "ui-toggle zoomslider"
 		Separator
diff --git a/src/frontends/qt/GuiClickableLabel.cpp b/src/frontends/qt/GuiClickableLabel.cpp
index 311755d130..bad90f3b8e 100644
--- a/src/frontends/qt/GuiClickableLabel.cpp
+++ b/src/frontends/qt/GuiClickableLabel.cpp
@@ -11,7 +11,7 @@
 
 #include "GuiClickableLabel.h"
 
-#include <QStyle>
+#include <QMouseEvent>
 
 namespace lyx {
 namespace frontend {
@@ -23,6 +23,11 @@ GuiClickableLabel::GuiClickableLabel(QWidget * parent)
 GuiClickableLabel::~GuiClickableLabel()
 {}
 
+void GuiClickableLabel::mousePressEvent(QMouseEvent * e) {
+	if (e->button() == Qt::LeftButton)
+		Q_EMIT pressed();
+}
+
 void GuiClickableLabel::mouseReleaseEvent(QMouseEvent *) {
 	Q_EMIT clicked();
 }
diff --git a/src/frontends/qt/GuiClickableLabel.h b/src/frontends/qt/GuiClickableLabel.h
index b14ba15de8..2fb4e8e25e 100644
--- a/src/frontends/qt/GuiClickableLabel.h
+++ b/src/frontends/qt/GuiClickableLabel.h
@@ -25,8 +25,10 @@ public:
 
 Q_SIGNALS:
 	void clicked();
+	void pressed();
 
 protected:
+	void mousePressEvent(QMouseEvent *) override;
 	void mouseReleaseEvent(QMouseEvent *) override;
 };
 
diff --git a/src/frontends/qt/GuiView.cpp b/src/frontends/qt/GuiView.cpp
index b87b494dac..24d6703e30 100644
--- a/src/frontends/qt/GuiView.cpp
+++ b/src/frontends/qt/GuiView.cpp
@@ -706,7 +706,8 @@ GuiView::GuiView(int id)
 
 	// QPalette palette = statusBar()->palette();
 
-	zoom_value_ = new QLabel(statusBar());
+	zoom_value_ = new GuiClickableLabel(statusBar());
+	connect(zoom_value_, SIGNAL(pressed()), this, SLOT(showZoomContextMenu()));
 	// zoom_value_->setPalette(palette);
 	zoom_value_->setForegroundRole(statusBar()->foregroundRole());
 	zoom_value_->setFixedHeight(fm.height());
@@ -722,7 +723,7 @@ GuiView::GuiView(int id)
 
 	statusBar()->setContextMenuPolicy(Qt::CustomContextMenu);
 	connect(statusBar(), SIGNAL(customContextMenuRequested(QPoint)),
-		this, SLOT(showZoomContextMenu()));
+		this, SLOT(showStatusBarContextMenu()));
 
 	// enable pinch to zoom
 	grabGesture(Qt::PinchGesture);
@@ -862,6 +863,15 @@ void GuiView::zoomOutPressed()
 
 
 void GuiView::showZoomContextMenu()
+{
+	QMenu * menu = guiApp->menus().menu(toqstr("context-zoom"), * this);
+	if (!menu)
+		return;
+	menu->exec(QCursor::pos());
+}
+
+
+void GuiView::showStatusBarContextMenu()
 {
 	QMenu * menu = guiApp->menus().menu(toqstr("context-statusbar"), * this);
 	if (!menu)
diff --git a/src/frontends/qt/GuiView.h b/src/frontends/qt/GuiView.h
index 7b89370151..cbe805eed3 100644
--- a/src/frontends/qt/GuiView.h
+++ b/src/frontends/qt/GuiView.h
@@ -263,6 +263,8 @@ private Q_SLOTS:
 	///
 	void showZoomContextMenu();
 	///
+	void showStatusBarContextMenu();
+	///
 	void on_currentWorkAreaChanged(GuiWorkArea *);
 	///
 	void onBufferViewChanged();
@@ -526,7 +528,7 @@ private:
 	/// This excludes blanks
 	bool char_nb_count_enabled_;
 	/// Statusbar widget that shows zoom value
-	QLabel * zoom_value_;
+	GuiClickableLabel * zoom_value_;
 	/// The zoom slider widget
 	QSlider * zoom_slider_;
 	/// Zoom in ("+") Button
-- 
2.24.3 (Apple Git-128)



More information about the lyx-devel mailing list