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

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
üst 997ca80c
......@@ -97,6 +97,7 @@ struct _LOKDocView
struct _LOKDocViewClass
{
GtkScrolledWindowClass parent_class;
void (* edit_changed) (LOKDocView* pView, gboolean was_edit);
};
guint lok_docview_get_type (void);
......
......@@ -34,6 +34,7 @@ static int help()
}
static GtkWidget* pDocView;
static GtkToolItem* pEnableEditing;
static GtkWidget* pDocViewQuad;
static GtkWidget* pVBox;
// GtkComboBox requires gtk 2.24 or later
......@@ -105,11 +106,22 @@ void changeZoom( GtkWidget* pButton, gpointer /* pItem */ )
}
}
/// User clicked on the button -> inform LOKDocView.
void toggleEditing(GtkWidget* /*pButton*/, gpointer /*pItem*/)
{
LOKDocView* pLOKDocView = LOK_DOCVIEW(pDocView);
bool bEdit = lok_docview_get_edit(pLOKDocView);
lok_docview_set_edit(pLOKDocView, !bEdit);
bool bActive = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(pEnableEditing));
if (lok_docview_get_edit(pLOKDocView) != bActive)
lok_docview_set_edit(pLOKDocView, bActive);
}
/// LOKDocView changed edit state -> inform the tool button.
static void signalEdit(LOKDocView* pLOKDocView, gboolean bWasEdit, gpointer /*pData*/)
{
gboolean bEdit = lok_docview_get_edit(pLOKDocView);
g_info("signalEdit: %d -> %d", bWasEdit, lok_docview_get_edit(pLOKDocView));
if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(pEnableEditing)) != bEdit)
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(pEnableEditing), bEdit);
}
void changeQuadView( GtkWidget* /*pButton*/, gpointer /* pItem */ )
......@@ -347,7 +359,7 @@ int main( int argc, char* argv[] )
g_signal_connect( G_OBJECT(pEnableQuadView), "toggled", G_CALLBACK(changeQuadView), NULL );
gtk_toolbar_insert( GTK_TOOLBAR(pToolbar), gtk_separator_tool_item_new(), -1);
GtkToolItem* pEnableEditing = gtk_toggle_tool_button_new();
pEnableEditing = gtk_toggle_tool_button_new();
gtk_tool_button_set_label(GTK_TOOL_BUTTON(pEnableEditing), "Editing");
gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), pEnableEditing, -1);
g_signal_connect(G_OBJECT(pEnableEditing), "toggled", G_CALLBACK(toggleEditing), NULL);
......@@ -357,6 +369,7 @@ int main( int argc, char* argv[] )
// Docview
pDocView = lok_docview_new( pOffice );
pDocViewQuad = 0;
g_signal_connect(pDocView, "edit-changed", G_CALLBACK(signalEdit), NULL);
// Input handling.
g_signal_connect(pWindow, "key-press-event", G_CALLBACK(signalKey), NULL);
......
......@@ -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));
}
......
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