summaryrefslogtreecommitdiff
path: root/libreofficekit
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-08-09 12:10:26 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-08-09 11:27:40 +0000
commit5cb52cf97d04859c0c730cf03430254041d6388b (patch)
treedd5667d087ded3212a456fcd485ab17a6cf8e1c5 /libreofficekit
parent08c963e49ddb25ee2f52ad218b72604faf323ba8 (diff)
gtktiledviewer: fix incorrect undo/redo state
Edit state = false disabled undo, then edit state = true enabled the undo button, even the last LOK callback was '.uno:Undo=disabled'. Fix this by storing the LOK state in a map, and using it when edit is enabled. With this, clicking on the Edit button right after loading a document results disabled undo/redo buttons as expected. Change-Id: Id6023f976f135555a43486f71603c823e59d8d60 Reviewed-on: https://gerrit.libreoffice.org/28003 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org>
Diffstat (limited to 'libreofficekit')
-rw-r--r--libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx47
1 files changed, 31 insertions, 16 deletions
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
index eaf1555d68e5..6c8e2d54dd50 100644
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
@@ -120,6 +120,9 @@ public:
GtkWidget* m_pScrolledWindow;
std::map<GtkToolItem*, std::string> m_aToolItemCommandNames;
std::map<std::string, GtkToolItem*> m_aCommandNameToolItems;
+ /// Sensitivity (enabled or disabled) or each tool item, ignoring edit
+ /// state.
+ std::map<GtkToolItem*, bool> m_aToolItemSensitivities;
bool m_bToolItemBroadcast;
GtkWidget* m_pVBox;
GtkComboBoxText* m_pPartSelector;
@@ -386,6 +389,7 @@ static void lcl_registerToolItem(TiledWindow& rWindow, GtkToolItem* pItem, const
{
rWindow.m_aToolItemCommandNames[pItem] = rName;
rWindow.m_aCommandNameToolItems[rName] = pItem;
+ rWindow.m_aToolItemSensitivities[pItem] = true;
}
const float fZooms[] = { 0.25, 0.5, 0.75, 1.0, 1.5, 2.0, 3.0, 5.0 };
@@ -958,6 +962,13 @@ static gboolean signalFormulabar(GtkWidget* /*pWidget*/, GdkEventKey* /*pEvent*/
return TRUE;
}
+/// Set sensitivity based on rWindow.m_aToolItemSensitivities, taking edit
+/// state into account.
+static void setSensitiveIfInEdit(GtkToolItem* pItem, gboolean bEdit, TiledWindow& rWindow)
+{
+ gtk_widget_set_sensitive(GTK_WIDGET(pItem), bEdit && rWindow.m_aToolItemSensitivities[pItem]);
+}
+
/// LOKDocView changed edit state -> inform the tool button.
static void signalEdit(LOKDocView* pLOKDocView, gboolean bWasEdit, gpointer /*pData*/)
{
@@ -966,22 +977,22 @@ static void signalEdit(LOKDocView* pLOKDocView, gboolean bWasEdit, gpointer /*pD
g_info("signalEdit: %d -> %d", bWasEdit, bEdit);
// Set toggle button sensitivity
- gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pBold), bEdit);
- gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pItalic), bEdit);
- gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pUnderline), bEdit);
- gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pStrikethrough), bEdit);
- gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pSuperscript), bEdit);
- gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pSubscript), bEdit);
- gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pLeftpara), bEdit);
- gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pCenterpara), bEdit);
- gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pRightpara), bEdit);
- gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pJustifypara), bEdit);
- gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pInsertAnnotation), bEdit);
- gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pDeleteComment), bEdit);
- gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pUndo), bEdit);
- gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pRedo), bEdit);
- gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pPasteButton), bEdit);
- gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pSaveButton), bEdit);
+ setSensitiveIfInEdit(rWindow.m_pBold, bEdit, rWindow);
+ setSensitiveIfInEdit(rWindow.m_pItalic, bEdit, rWindow);
+ setSensitiveIfInEdit(rWindow.m_pUnderline, bEdit, rWindow);
+ setSensitiveIfInEdit(rWindow.m_pStrikethrough, bEdit, rWindow);
+ setSensitiveIfInEdit(rWindow.m_pSuperscript, bEdit, rWindow);
+ setSensitiveIfInEdit(rWindow.m_pSubscript, bEdit, rWindow);
+ setSensitiveIfInEdit(rWindow.m_pLeftpara, bEdit, rWindow);
+ setSensitiveIfInEdit(rWindow.m_pCenterpara, bEdit, rWindow);
+ setSensitiveIfInEdit(rWindow.m_pRightpara, bEdit, rWindow);
+ setSensitiveIfInEdit(rWindow.m_pJustifypara, bEdit, rWindow);
+ setSensitiveIfInEdit(rWindow.m_pInsertAnnotation, bEdit, rWindow);
+ setSensitiveIfInEdit(rWindow.m_pDeleteComment, bEdit, rWindow);
+ setSensitiveIfInEdit(rWindow.m_pUndo, bEdit, rWindow);
+ setSensitiveIfInEdit(rWindow.m_pRedo, bEdit, rWindow);
+ setSensitiveIfInEdit(rWindow.m_pPasteButton, bEdit, rWindow);
+ setSensitiveIfInEdit(rWindow.m_pSaveButton, bEdit, rWindow);
}
/// LOKDocView changed command state -> inform the tool button.
@@ -1010,6 +1021,10 @@ static void signalCommand(LOKDocView* pLOKDocView, char* pPayload, gpointer /*pD
} else if (aValue == "enabled" || aValue == "disabled") {
gboolean bSensitive = aValue == "enabled";
gtk_widget_set_sensitive(GTK_WIDGET(pItem), bSensitive);
+
+ // Remember state, so in case edit is disable and enabled
+ // later, the correct sensitivity can be restored.
+ rWindow.m_aToolItemSensitivities[pItem] = bSensitive;
}
}
}