summaryrefslogtreecommitdiff
path: root/vcl/unx/gtk3/gtk3gtkinst.cxx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-05-06 15:21:33 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-05-10 14:37:06 +0200
commit476ed0aed1c09055fa05209485919a026e5f014e (patch)
tree68c2cc8ca587dd7b47f97d800d32560339f546fc /vcl/unx/gtk3/gtk3gtkinst.cxx
parent7cee480efe22d48af9e9d96b49ad4358a4010690 (diff)
weld SdStartPresentationDlg
to get duration spinbutton working need to know where the cursor is in the spinbutton and to change the adjustment factor depending on that, and need to additionally disable the vcl round to nearest base unit on up/down Change-Id: I6dd09e1639454cb4820d3aeb0c0c698fcebd417e Reviewed-on: https://gerrit.libreoffice.org/54065 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl/unx/gtk3/gtk3gtkinst.cxx')
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx35
1 files changed, 35 insertions, 0 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index d881155c7d40..f0cbf0ed97e4 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -2753,6 +2753,7 @@ private:
GtkEntry* m_pEntry;
gulong m_nChangedSignalId;
gulong m_nInsertTextSignalId;
+ gulong m_nCursorPosSignalId;
static void signalChanged(GtkEntry*, gpointer widget)
{
@@ -2784,12 +2785,20 @@ private:
}
g_signal_stop_emission_by_name(pEntry, "insert-text");
}
+
+ static void signalCursorPosition(GtkEntry*, GParamSpec*, gpointer widget)
+ {
+ GtkInstanceEntry* pThis = static_cast<GtkInstanceEntry*>(widget);
+ pThis->signal_cursor_position();
+ }
+
public:
GtkInstanceEntry(GtkEntry* pEntry, bool bTakeOwnership)
: GtkInstanceWidget(GTK_WIDGET(pEntry), bTakeOwnership)
, m_pEntry(pEntry)
, m_nChangedSignalId(g_signal_connect(pEntry, "changed", G_CALLBACK(signalChanged), this))
, m_nInsertTextSignalId(g_signal_connect(pEntry, "insert-text", G_CALLBACK(signalInsertText), this))
+ , m_nCursorPosSignalId(g_signal_connect(pEntry, "notify::cursor-position", G_CALLBACK(signalCursorPosition), this))
{
}
@@ -2941,6 +2950,7 @@ public:
virtual ~GtkInstanceEntry() override
{
+ g_signal_handler_disconnect(m_pEntry, m_nCursorPosSignalId);
g_signal_handler_disconnect(m_pEntry, m_nInsertTextSignalId);
g_signal_handler_disconnect(m_pEntry, m_nChangedSignalId);
}
@@ -3279,6 +3289,7 @@ private:
GtkSpinButton* m_pButton;
gulong m_nValueChangedSignalId;
gulong m_nOutputSignalId;
+ gulong m_nInputSignalId;
static void signalValueChanged(GtkSpinButton*, gpointer widget)
{
@@ -3294,6 +3305,22 @@ private:
return pThis->signal_output();
}
+ static gboolean signalInput(GtkSpinButton*, gdouble* new_value, gpointer widget)
+ {
+ GtkInstanceSpinButton* pThis = static_cast<GtkInstanceSpinButton*>(widget);
+ SolarMutexGuard aGuard;
+ int result;
+ TriState eHandled = pThis->signal_input(&result);
+ if (eHandled == TRISTATE_INDET)
+ return false;
+ if (eHandled == TRISTATE_TRUE)
+ {
+ *new_value = result;
+ return true;
+ }
+ return GTK_INPUT_ERROR;
+ }
+
double toGtk(int nValue) const
{
return static_cast<double>(nValue) / Power10(get_digits());
@@ -3310,6 +3337,7 @@ public:
, m_pButton(pButton)
, m_nValueChangedSignalId(g_signal_connect(pButton, "value-changed", G_CALLBACK(signalValueChanged), this))
, m_nOutputSignalId(g_signal_connect(pButton, "output", G_CALLBACK(signalOutput), this))
+ , m_nInputSignalId(g_signal_connect(pButton, "input", G_CALLBACK(signalInput), this))
{
}
@@ -3381,6 +3409,7 @@ public:
virtual ~GtkInstanceSpinButton() override
{
+ g_signal_handler_disconnect(m_pButton, m_nInputSignalId);
g_signal_handler_disconnect(m_pButton, m_nOutputSignalId);
g_signal_handler_disconnect(m_pButton, m_nValueChangedSignalId);
}
@@ -4587,6 +4616,12 @@ public:
return new GtkInstanceSpinButton(pSpinButton, bTakeOwnership);
}
+ virtual weld::TimeSpinButton* weld_time_spin_button(const OString& id, TimeFieldFormat eFormat,
+ bool bTakeOwnership) override
+ {
+ return new weld::TimeSpinButton(weld_spin_button(id, bTakeOwnership), eFormat);
+ }
+
virtual weld::ComboBoxText* weld_combo_box_text(const OString &id, bool bTakeOwnership) override
{
GtkComboBoxText* pComboBoxText = GTK_COMBO_BOX_TEXT(gtk_builder_get_object(m_pBuilder, id.getStr()));