Kaydet (Commit) 5cb52cf9 authored tarafından Miklos Vajna's avatar Miklos Vajna

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/28003Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.co.uk>
Tested-by: 's avatarJenkins <ci@libreoffice.org>
üst 08c963e4
...@@ -120,6 +120,9 @@ public: ...@@ -120,6 +120,9 @@ public:
GtkWidget* m_pScrolledWindow; GtkWidget* m_pScrolledWindow;
std::map<GtkToolItem*, std::string> m_aToolItemCommandNames; std::map<GtkToolItem*, std::string> m_aToolItemCommandNames;
std::map<std::string, GtkToolItem*> m_aCommandNameToolItems; 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; bool m_bToolItemBroadcast;
GtkWidget* m_pVBox; GtkWidget* m_pVBox;
GtkComboBoxText* m_pPartSelector; GtkComboBoxText* m_pPartSelector;
...@@ -386,6 +389,7 @@ static void lcl_registerToolItem(TiledWindow& rWindow, GtkToolItem* pItem, const ...@@ -386,6 +389,7 @@ static void lcl_registerToolItem(TiledWindow& rWindow, GtkToolItem* pItem, const
{ {
rWindow.m_aToolItemCommandNames[pItem] = rName; rWindow.m_aToolItemCommandNames[pItem] = rName;
rWindow.m_aCommandNameToolItems[rName] = pItem; 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 }; 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*/ ...@@ -958,6 +962,13 @@ static gboolean signalFormulabar(GtkWidget* /*pWidget*/, GdkEventKey* /*pEvent*/
return TRUE; 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. /// LOKDocView changed edit state -> inform the tool button.
static void signalEdit(LOKDocView* pLOKDocView, gboolean bWasEdit, gpointer /*pData*/) static void signalEdit(LOKDocView* pLOKDocView, gboolean bWasEdit, gpointer /*pData*/)
{ {
...@@ -966,22 +977,22 @@ static void signalEdit(LOKDocView* pLOKDocView, gboolean bWasEdit, gpointer /*pD ...@@ -966,22 +977,22 @@ static void signalEdit(LOKDocView* pLOKDocView, gboolean bWasEdit, gpointer /*pD
g_info("signalEdit: %d -> %d", bWasEdit, bEdit); g_info("signalEdit: %d -> %d", bWasEdit, bEdit);
// Set toggle button sensitivity // Set toggle button sensitivity
gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pBold), bEdit); setSensitiveIfInEdit(rWindow.m_pBold, bEdit, rWindow);
gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pItalic), bEdit); setSensitiveIfInEdit(rWindow.m_pItalic, bEdit, rWindow);
gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pUnderline), bEdit); setSensitiveIfInEdit(rWindow.m_pUnderline, bEdit, rWindow);
gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pStrikethrough), bEdit); setSensitiveIfInEdit(rWindow.m_pStrikethrough, bEdit, rWindow);
gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pSuperscript), bEdit); setSensitiveIfInEdit(rWindow.m_pSuperscript, bEdit, rWindow);
gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pSubscript), bEdit); setSensitiveIfInEdit(rWindow.m_pSubscript, bEdit, rWindow);
gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pLeftpara), bEdit); setSensitiveIfInEdit(rWindow.m_pLeftpara, bEdit, rWindow);
gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pCenterpara), bEdit); setSensitiveIfInEdit(rWindow.m_pCenterpara, bEdit, rWindow);
gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pRightpara), bEdit); setSensitiveIfInEdit(rWindow.m_pRightpara, bEdit, rWindow);
gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pJustifypara), bEdit); setSensitiveIfInEdit(rWindow.m_pJustifypara, bEdit, rWindow);
gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pInsertAnnotation), bEdit); setSensitiveIfInEdit(rWindow.m_pInsertAnnotation, bEdit, rWindow);
gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pDeleteComment), bEdit); setSensitiveIfInEdit(rWindow.m_pDeleteComment, bEdit, rWindow);
gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pUndo), bEdit); setSensitiveIfInEdit(rWindow.m_pUndo, bEdit, rWindow);
gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pRedo), bEdit); setSensitiveIfInEdit(rWindow.m_pRedo, bEdit, rWindow);
gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pPasteButton), bEdit); setSensitiveIfInEdit(rWindow.m_pPasteButton, bEdit, rWindow);
gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pSaveButton), bEdit); setSensitiveIfInEdit(rWindow.m_pSaveButton, bEdit, rWindow);
} }
/// LOKDocView changed command state -> inform the tool button. /// LOKDocView changed command state -> inform the tool button.
...@@ -1010,6 +1021,10 @@ static void signalCommand(LOKDocView* pLOKDocView, char* pPayload, gpointer /*pD ...@@ -1010,6 +1021,10 @@ static void signalCommand(LOKDocView* pLOKDocView, char* pPayload, gpointer /*pD
} else if (aValue == "enabled" || aValue == "disabled") { } else if (aValue == "enabled" || aValue == "disabled") {
gboolean bSensitive = aValue == "enabled"; gboolean bSensitive = aValue == "enabled";
gtk_widget_set_sensitive(GTK_WIDGET(pItem), bSensitive); 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;
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment