diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-03-10 12:50:59 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-03-16 09:38:04 +0100 |
commit | 5fb4e35f3454cb49bf5e5f611224216862f6f611 (patch) | |
tree | 09664e0322bf5e4eb3ed608be3964681bd1fc64b /libreofficekit/source/gtk | |
parent | 997ca80cc9da940adbd59ce83999e4ffaf4f64d0 (diff) |
lokdocview: add edit-changed signal, so toolbar toggle button is in sync
Editing can start by clicking into the widget or by pressing the toggle
button on the toolbar. In the first case the widget should emit a signal,
so the the toggle button's state can be up to date.
In both toggle button <-> LOK widget direction only update the state if
it's not yet up to date to avoid infinite loops.
Change-Id: I84c9e7757cd7cde42a95f67f0cb28f9ad6984e7a
Diffstat (limited to 'libreofficekit/source/gtk')
-rw-r--r-- | libreofficekit/source/gtk/lokdocview.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/libreofficekit/source/gtk/lokdocview.c b/libreofficekit/source/gtk/lokdocview.c index e12266b5c29b..3980a50edd8c 100644 --- a/libreofficekit/source/gtk/lokdocview.c +++ b/libreofficekit/source/gtk/lokdocview.c @@ -232,7 +232,8 @@ gboolean lcl_signalButton(GtkWidget* pEventBox, GdkEventButton* pEvent, LOKDocVi } } - lok_docview_set_edit(pDocView, TRUE); + if (!pDocView->m_bEdit) + lok_docview_set_edit(pDocView, TRUE); switch (pEvent->type) { @@ -289,9 +290,27 @@ SAL_DLLPUBLIC_EXPORT guint lok_docview_get_type() return lok_docview_type; } +enum +{ + EDIT_CHANGED, + LAST_SIGNAL +}; + +static guint docview_signals[LAST_SIGNAL] = { 0 }; + static void lok_docview_class_init( LOKDocViewClass* pClass ) { - (void)pClass; + GObjectClass *gobject_class = G_OBJECT_CLASS(pClass); + pClass->edit_changed = NULL; + docview_signals[EDIT_CHANGED] = + g_signal_new("edit-changed", + G_TYPE_FROM_CLASS (gobject_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (LOKDocViewClass, edit_changed), + NULL, NULL, + g_cclosure_marshal_VOID__BOOLEAN, + G_TYPE_NONE, 1, + G_TYPE_BOOLEAN); } static void lok_docview_init( LOKDocView* pDocView ) @@ -950,9 +969,12 @@ SAL_DLLPUBLIC_EXPORT void lok_docview_set_partmode( LOKDocView* pDocView, SAL_DLLPUBLIC_EXPORT void lok_docview_set_edit( LOKDocView* pDocView, gboolean bEdit ) { + gboolean bWasEdit = pDocView->m_bEdit; + if (!pDocView->m_bEdit && bEdit) g_info("lok_docview_set_edit: entering edit mode"); pDocView->m_bEdit = bEdit; + g_signal_emit(pDocView, docview_signals[EDIT_CHANGED], 0, bWasEdit); gtk_widget_queue_draw(GTK_WIDGET(pDocView->pEventBox)); } |