[gtkmm-documentation] examples: Update for latest gtkmm4 (remove property_margin(), etc.)
- From: Kjell Ahlstedt <kjellahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtkmm-documentation] examples: Update for latest gtkmm4 (remove property_margin(), etc.)
- Date: Thu, 12 Mar 2020 16:08:14 +0000 (UTC)
commit 36f1365591be7df3b29273934f502e1c6ad5ce3a
Author: Kjell Ahlstedt <kjellahlstedt gmail com>
Date: Thu Mar 12 17:05:34 2020 +0100
examples: Update for latest gtkmm4 (remove property_margin(), etc.)
* examples/book/drag_and_drop/dndwindow.[cc|h]:
* examples/others/dnd/dndwindow.[cc|h]: Drag-and-drop has been modified
in gtk and gtkmm. These DnD examples can now be compiled, but they don't
fully work. Neither does tests/testdnd.c in gtk.
Widget::property_margin() and property_expand() have been removed.
It affects many .ui files and ui_info strings.
examples/book/buildapp/step5/prefs.ui | 5 +-
examples/book/buildapp/step6/prefs.ui | 5 +-
examples/book/buildapp/step7/prefs.ui | 5 +-
examples/book/buildapp/step8/prefs.ui | 5 +-
examples/book/buildapp/step9/prefs.ui | 5 +-
examples/book/drag_and_drop/dndwindow.cc | 37 +++---
examples/book/drag_and_drop/dndwindow.h | 4 +-
examples/book/menus/main_menu/examplewindow.cc | 6 +-
examples/book/menus/popup/examplewindow.cc | 4 +-
examples/book/menus_and_toolbars/toolbar.glade | 9 +-
examples/book/popover/examplewindow.cc | 4 +-
examples/book/printing/advanced/examplewindow.cc | 12 +-
examples/book/printing/simple/examplewindow.cc | 12 +-
examples/book/recent_files/examplewindow.cc | 6 +-
examples/book/treeview/popup/treeview_withpopup.cc | 2 +-
.../others/cellrenderercustom/cellrendererpopup.cc | 5 +-
examples/others/dnd/dndwindow.cc | 144 +++++++--------------
examples/others/dnd/dndwindow.h | 22 ++--
18 files changed, 130 insertions(+), 162 deletions(-)
---
diff --git a/examples/book/buildapp/step5/prefs.ui b/examples/book/buildapp/step5/prefs.ui
index 580daaf..e8aa1ea 100644
--- a/examples/book/buildapp/step5/prefs.ui
+++ b/examples/book/buildapp/step5/prefs.ui
@@ -9,7 +9,10 @@
<object class="GtkBox" id="content_area">
<child>
<object class="GtkGrid" id="grid">
- <property name="margin">6</property>
+ <property name="margin-start">6</property>
+ <property name="margin-end">6</property>
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">6</property>
<property name="row-spacing">12</property>
<property name="column-spacing">6</property>
<child>
diff --git a/examples/book/buildapp/step6/prefs.ui b/examples/book/buildapp/step6/prefs.ui
index 580daaf..e8aa1ea 100644
--- a/examples/book/buildapp/step6/prefs.ui
+++ b/examples/book/buildapp/step6/prefs.ui
@@ -9,7 +9,10 @@
<object class="GtkBox" id="content_area">
<child>
<object class="GtkGrid" id="grid">
- <property name="margin">6</property>
+ <property name="margin-start">6</property>
+ <property name="margin-end">6</property>
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">6</property>
<property name="row-spacing">12</property>
<property name="column-spacing">6</property>
<child>
diff --git a/examples/book/buildapp/step7/prefs.ui b/examples/book/buildapp/step7/prefs.ui
index 580daaf..e8aa1ea 100644
--- a/examples/book/buildapp/step7/prefs.ui
+++ b/examples/book/buildapp/step7/prefs.ui
@@ -9,7 +9,10 @@
<object class="GtkBox" id="content_area">
<child>
<object class="GtkGrid" id="grid">
- <property name="margin">6</property>
+ <property name="margin-start">6</property>
+ <property name="margin-end">6</property>
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">6</property>
<property name="row-spacing">12</property>
<property name="column-spacing">6</property>
<child>
diff --git a/examples/book/buildapp/step8/prefs.ui b/examples/book/buildapp/step8/prefs.ui
index 580daaf..e8aa1ea 100644
--- a/examples/book/buildapp/step8/prefs.ui
+++ b/examples/book/buildapp/step8/prefs.ui
@@ -9,7 +9,10 @@
<object class="GtkBox" id="content_area">
<child>
<object class="GtkGrid" id="grid">
- <property name="margin">6</property>
+ <property name="margin-start">6</property>
+ <property name="margin-end">6</property>
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">6</property>
<property name="row-spacing">12</property>
<property name="column-spacing">6</property>
<child>
diff --git a/examples/book/buildapp/step9/prefs.ui b/examples/book/buildapp/step9/prefs.ui
index 580daaf..e8aa1ea 100644
--- a/examples/book/buildapp/step9/prefs.ui
+++ b/examples/book/buildapp/step9/prefs.ui
@@ -9,7 +9,10 @@
<object class="GtkBox" id="content_area">
<child>
<object class="GtkGrid" id="grid">
- <property name="margin">6</property>
+ <property name="margin-start">6</property>
+ <property name="margin-end">6</property>
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">6</property>
<property name="row-spacing">12</property>
<property name="column-spacing">6</property>
<child>
diff --git a/examples/book/drag_and_drop/dndwindow.cc b/examples/book/drag_and_drop/dndwindow.cc
index ece2383..8f760be 100644
--- a/examples/book/drag_and_drop/dndwindow.cc
+++ b/examples/book/drag_and_drop/dndwindow.cc
@@ -15,7 +15,6 @@
*/
#include "dndwindow.h"
-#include <gdkmm/contentformats.h>
#include <gdkmm/contentprovider.h>
#include <gtkmm/dragsource.h>
#include <gtkmm/droptarget.h>
@@ -32,8 +31,8 @@ DnDWindow::DnDWindow()
//Drag site:
//Make m_Label_Drag a DnD drag source:
- const GType ustring_type = Glib::Value<Glib::ustring>::value_type();
auto source = Gtk::DragSource::create();
+ source->set_actions(Gdk::DragAction::COPY);
source->signal_prepare().connect(
sigc::mem_fun(*this, &DnDWindow::on_label_drag_prepare_data), false);
m_Label_Drag.add_controller(source);
@@ -44,10 +43,10 @@ DnDWindow::DnDWindow()
//Drop site:
//Make m_Button_Drop a DnD drop destination:
- auto formats = Gdk::ContentFormats::create(ustring_type);
- auto target = Gtk::DropTarget::create(formats, Gdk::DragAction::COPY);
- target->signal_drag_drop().connect(
- sigc::mem_fun(*this, &DnDWindow::on_button_drop_drag_drop), false);
+ const GType ustring_type = Glib::Value<Glib::ustring>::value_type();
+ auto target = Gtk::DropTarget::create(ustring_type, Gdk::DragAction::COPY);
+ target->signal_drop().connect(
+ sigc::mem_fun(*this, &DnDWindow::on_button_drop_drop_data), false);
m_Button_Drop.add_controller(target);
m_HBox.add(m_Button_Drop);
@@ -69,24 +68,22 @@ Glib::RefPtr<Gdk::ContentProvider> DnDWindow::on_label_drag_prepare_data(double,
return Gdk::ContentProvider::create(ustring_value);
}
-bool DnDWindow::on_button_drop_drag_drop(const Glib::RefPtr<Gdk::Drop>& drop, int, int)
-{
- drop->read_text_async(sigc::bind(sigc::mem_fun(*this, &DnDWindow::on_button_drop_got_data), drop));
- return true;
-}
-
-void DnDWindow::on_button_drop_got_data(Glib::RefPtr<Gio::AsyncResult>& result,
- const Glib::RefPtr<Gdk::Drop>& drop)
+bool DnDWindow::on_button_drop_drop_data(const Glib::ValueBase& value, double, double)
{
- try
+ if (G_VALUE_HOLDS(value.gobj(), Glib::Value<Glib::ustring>::value_type()))
{
- const Glib::ustring dropped_string = drop->read_text_finish(result);
+ // We got the value type that we expected.
+ Glib::Value<Glib::ustring> ustring_value;
+ ustring_value.init(value.gobj());
+ const Glib::ustring dropped_string = ustring_value.get();
+
std::cout << "Received \"" << dropped_string << "\" in button " << std::endl;
- drop->finish(Gdk::DragAction::COPY);
+ return true;
}
- catch (const std::exception& ex)
+ else
{
- std::cout << "Drop failed: " << ex.what() << std::endl;
- drop->failed();
+ std::cout << "Received unexpected data type \""
+ << G_VALUE_TYPE_NAME(value.gobj()) << "\" in button " << std::endl;
+ return false;
}
}
diff --git a/examples/book/drag_and_drop/dndwindow.h b/examples/book/drag_and_drop/dndwindow.h
index 563837f..8de4612 100644
--- a/examples/book/drag_and_drop/dndwindow.h
+++ b/examples/book/drag_and_drop/dndwindow.h
@@ -33,9 +33,7 @@ public:
protected:
//Signal handlers:
Glib::RefPtr<Gdk::ContentProvider> on_label_drag_prepare_data(double x, double y);
- bool on_button_drop_drag_drop(const Glib::RefPtr<Gdk::Drop>& drop, int x, int y);
- void on_button_drop_got_data(Glib::RefPtr<Gio::AsyncResult>& result,
- const Glib::RefPtr<Gdk::Drop>& drop);
+ bool on_button_drop_drop_data(const Glib::ValueBase& value, double x, double y);
//Member widgets:
Gtk::Box m_HBox;
diff --git a/examples/book/menus/main_menu/examplewindow.cc b/examples/book/menus/main_menu/examplewindow.cc
index 1b507ac..bd874ff 100644
--- a/examples/book/menus/main_menu/examplewindow.cc
+++ b/examples/book/menus/main_menu/examplewindow.cc
@@ -69,7 +69,8 @@ ExampleWindow::ExampleWindow()
" <property name='tooltip_text' translatable='yes'>New Standard</property>"
" <property name='action_name'>app.newstandard</property>"
" <property name='icon_name'>document-new</property>"
- " <property name='expand'>False</property>"
+ " <property name='hexpand'>False</property>"
+ " <property name='vexpand'>False</property>"
" </object>"
" </child>"
" <child>"
@@ -78,7 +79,8 @@ ExampleWindow::ExampleWindow()
" <property name='tooltip_text' translatable='yes'>Quit</property>"
" <property name='action_name'>app.quit</property>"
" <property name='icon_name'>application-exit</property>"
- " <property name='expand'>False</property>"
+ " <property name='hexpand'>False</property>"
+ " <property name='vexpand'>False</property>"
" </object>"
" </child>"
" </object>"
diff --git a/examples/book/menus/popup/examplewindow.cc b/examples/book/menus/popup/examplewindow.cc
index d6549fa..d5ec9ab 100644
--- a/examples/book/menus/popup/examplewindow.cc
+++ b/examples/book/menus/popup/examplewindow.cc
@@ -19,8 +19,7 @@
ExampleWindow::ExampleWindow(const Glib::RefPtr<Gtk::Application>& app)
: m_Box(Gtk::Orientation::VERTICAL),
- m_Label("Right-click to see the popup menu."),
- m_MenuPopup(m_Label)
+ m_Label("Right-click to see the popup menu.")
{
set_title("popup example");
set_default_size(200, 200);
@@ -100,6 +99,7 @@ ExampleWindow::ExampleWindow(const Glib::RefPtr<Gtk::Application>& app)
if(!gmenu)
g_warning("GMenu not found");
+ m_MenuPopup.set_parent(m_Label);
m_MenuPopup.set_menu_model(gmenu);
m_MenuPopup.set_has_arrow(false);
}
diff --git a/examples/book/menus_and_toolbars/toolbar.glade b/examples/book/menus_and_toolbars/toolbar.glade
index b7c68cb..1078b02 100644
--- a/examples/book/menus_and_toolbars/toolbar.glade
+++ b/examples/book/menus_and_toolbars/toolbar.glade
@@ -11,7 +11,8 @@
<property name="tooltip_text" translatable="yes">New</property>
<property name="action_name">example.new</property>
<property name="icon_name">document-new</property>
- <property name="expand">False</property>
+ <property name="hexpand">False</property>
+ <property name="vexpand">False</property>
</object>
</child>
<child>
@@ -19,7 +20,8 @@
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Stay dry in the rain</property>
<property name="action_name">example.rain</property>
- <property name="expand">False</property>
+ <property name="hexpand">False</property>
+ <property name="vexpand">False</property>
<child>
<object class="GtkImage" id="image_rain">
<property name="can_focus">False</property>
@@ -34,7 +36,8 @@
<property name="tooltip_text" translatable="yes">Quit</property>
<property name="action_name">example.quit</property>
<property name="icon_name">application-exit</property>
- <property name="expand">False</property>
+ <property name="hexpand">False</property>
+ <property name="vexpand">False</property>
</object>
</child>
</object>
diff --git a/examples/book/popover/examplewindow.cc b/examples/book/popover/examplewindow.cc
index cd6f09e..a6a748a 100644
--- a/examples/book/popover/examplewindow.cc
+++ b/examples/book/popover/examplewindow.cc
@@ -19,10 +19,8 @@
ExampleWindow::ExampleWindow()
: m_format_buttons_box(Gtk::Orientation::HORIZONTAL),
m_toggle_button("Button"),
- m_toggle_form_popover(m_toggle_button),
m_toggle_form_label("Non-modal Popover"),
m_toggle_form_combo_label("Popover position:"),
- m_calendar_popover(m_calendar),
m_calendar_popover_label("Label:")
{
// Window properties
@@ -71,6 +69,7 @@ void ExampleWindow::configure_form_popover()
m_toggle_form_grid.attach(m_toggle_form_combo_label, 0, 2, 1, 1);
m_toggle_form_grid.attach(m_toggle_form_combo, 1, 2, 1, 1);
+ m_toggle_form_popover.set_parent(m_toggle_button);
m_toggle_form_popover.add(m_toggle_form_grid);
m_toggle_form_popover.set_position(Gtk::PositionType::BOTTOM);
m_toggle_form_popover.set_margin(6);
@@ -131,6 +130,7 @@ void ExampleWindow::configure_cal_popover()
m_calendar_form_grid.attach(m_calendar_popover_label, 0, 0, 1, 1);
m_calendar_form_grid.attach(m_calendar_popover_entry, 1, 0, 1, 1);
+ m_calendar_popover.set_parent(m_calendar);
m_calendar_popover.add(m_calendar_form_grid);
m_calendar_popover.set_margin(6);
}
diff --git a/examples/book/printing/advanced/examplewindow.cc
b/examples/book/printing/advanced/examplewindow.cc
index df82aa2..4dc23bd 100644
--- a/examples/book/printing/advanced/examplewindow.cc
+++ b/examples/book/printing/advanced/examplewindow.cc
@@ -165,7 +165,8 @@ void ExampleWindow::build_main_menu(const Glib::RefPtr<Gtk::Application>& app)
"<property name='tooltip_text' translatable='yes'>New</property>"
"<property name='action_name'>example.new</property>"
"<property name='icon_name'>document-new</property>"
- "<property name='expand'>False</property>"
+ "<property name='hexpand'>False</property>"
+ "<property name='vexpand'>False</property>"
"</object>"
"</child>"
"<child>"
@@ -174,13 +175,15 @@ void ExampleWindow::build_main_menu(const Glib::RefPtr<Gtk::Application>& app)
"<property name='tooltip_text' translatable='yes'>Print</property>"
"<property name='action_name'>example.print</property>"
"<property name='icon_name'>document-print</property>"
- "<property name='expand'>False</property>"
+ "<property name='hexpand'>False</property>"
+ "<property name='vexpand'>False</property>"
"</object>"
"</child>"
"<child>"
"<object class='GtkSeparator' id='separator1'>"
"<property name='can_focus'>False</property>"
- "<property name='expand'>False</property>"
+ "<property name='hexpand'>False</property>"
+ "<property name='vexpand'>False</property>"
"</object>"
"</child>"
"<child>"
@@ -189,7 +192,8 @@ void ExampleWindow::build_main_menu(const Glib::RefPtr<Gtk::Application>& app)
"<property name='tooltip_text' translatable='yes'>Quit</property>"
"<property name='action_name'>example.quit</property>"
"<property name='icon_name'>application-exit</property>"
- "<property name='expand'>False</property>"
+ "<property name='hexpand'>False</property>"
+ "<property name='vexpand'>False</property>"
"</object>"
"</child>"
"</object>"
diff --git a/examples/book/printing/simple/examplewindow.cc b/examples/book/printing/simple/examplewindow.cc
index df82aa2..4dc23bd 100644
--- a/examples/book/printing/simple/examplewindow.cc
+++ b/examples/book/printing/simple/examplewindow.cc
@@ -165,7 +165,8 @@ void ExampleWindow::build_main_menu(const Glib::RefPtr<Gtk::Application>& app)
"<property name='tooltip_text' translatable='yes'>New</property>"
"<property name='action_name'>example.new</property>"
"<property name='icon_name'>document-new</property>"
- "<property name='expand'>False</property>"
+ "<property name='hexpand'>False</property>"
+ "<property name='vexpand'>False</property>"
"</object>"
"</child>"
"<child>"
@@ -174,13 +175,15 @@ void ExampleWindow::build_main_menu(const Glib::RefPtr<Gtk::Application>& app)
"<property name='tooltip_text' translatable='yes'>Print</property>"
"<property name='action_name'>example.print</property>"
"<property name='icon_name'>document-print</property>"
- "<property name='expand'>False</property>"
+ "<property name='hexpand'>False</property>"
+ "<property name='vexpand'>False</property>"
"</object>"
"</child>"
"<child>"
"<object class='GtkSeparator' id='separator1'>"
"<property name='can_focus'>False</property>"
- "<property name='expand'>False</property>"
+ "<property name='hexpand'>False</property>"
+ "<property name='vexpand'>False</property>"
"</object>"
"</child>"
"<child>"
@@ -189,7 +192,8 @@ void ExampleWindow::build_main_menu(const Glib::RefPtr<Gtk::Application>& app)
"<property name='tooltip_text' translatable='yes'>Quit</property>"
"<property name='action_name'>example.quit</property>"
"<property name='icon_name'>application-exit</property>"
- "<property name='expand'>False</property>"
+ "<property name='hexpand'>False</property>"
+ "<property name='vexpand'>False</property>"
"</object>"
"</child>"
"</object>"
diff --git a/examples/book/recent_files/examplewindow.cc b/examples/book/recent_files/examplewindow.cc
index 8abc9bd..8f152e1 100644
--- a/examples/book/recent_files/examplewindow.cc
+++ b/examples/book/recent_files/examplewindow.cc
@@ -85,7 +85,8 @@ ExampleWindow::ExampleWindow(const Glib::RefPtr<Gtk::Application>& app)
" <property name='tooltip_text' translatable='yes'>New</property>"
" <property name='action_name'>example.new</property>"
" <property name='icon_name'>document-new</property>"
- " <property name='expand'>False</property>"
+ " <property name='hexpand'>False</property>"
+ " <property name='vexpand'>False</property>"
" </object>"
" </child>"
" <child>"
@@ -94,7 +95,8 @@ ExampleWindow::ExampleWindow(const Glib::RefPtr<Gtk::Application>& app)
" <property name='tooltip_text' translatable='yes'>Quit</property>"
" <property name='action_name'>example.quit</property>"
" <property name='icon_name'>application-exit</property>"
- " <property name='expand'>False</property>"
+ " <property name='hexpand'>False</property>"
+ " <property name='vexpand'>False</property>"
" </object>"
" </child>"
" </object>"
diff --git a/examples/book/treeview/popup/treeview_withpopup.cc
b/examples/book/treeview/popup/treeview_withpopup.cc
index 972eb3c..d68b731 100644
--- a/examples/book/treeview/popup/treeview_withpopup.cc
+++ b/examples/book/treeview/popup/treeview_withpopup.cc
@@ -18,7 +18,6 @@
#include <iostream>
TreeView_WithPopup::TreeView_WithPopup()
-: m_MenuPopup(*this)
{
//Create the Tree model:
m_refTreeModel = Gtk::ListStore::create(m_Columns);
@@ -54,6 +53,7 @@ TreeView_WithPopup::TreeView_WithPopup()
gmenu->append("_Process", "popup.process");
gmenu->append("_Remove", "popup.remove");
+ m_MenuPopup.set_parent(*this);
m_MenuPopup.set_menu_model(gmenu);
m_MenuPopup.set_has_arrow(false);
diff --git a/examples/others/cellrenderercustom/cellrendererpopup.cc
b/examples/others/cellrenderercustom/cellrendererpopup.cc
index 2deeaa3..fe3212e 100644
--- a/examples/others/cellrenderercustom/cellrendererpopup.cc
+++ b/examples/others/cellrenderercustom/cellrendererpopup.cc
@@ -205,7 +205,8 @@ void CellRendererPopup::on_show_popup(const Glib::ustring&, int, int y1, int x2,
x -= alloc.get_width();
x = std::max(0, x);
- popup_window_.add_modal_grab();
+ popup_window_.set_can_focus(true);
+ popup_window_.grab_focus();
//popup_window_.move(x, y);
(void)x; (void)y; // Pretend that x and y are used.
@@ -221,7 +222,7 @@ void CellRendererPopup::on_show_popup(const Glib::ustring&, int, int y1, int x2,
void CellRendererPopup::on_hide_popup()
{
- popup_window_.remove_modal_grab();
+ popup_window_.set_can_focus(false);
popup_window_.hide();
if(popup_entry_)
diff --git a/examples/others/dnd/dndwindow.cc b/examples/others/dnd/dndwindow.cc
index 1308cc8..f944fca 100644
--- a/examples/others/dnd/dndwindow.cc
+++ b/examples/others/dnd/dndwindow.cc
@@ -36,26 +36,11 @@ DnDWindow::DnDWindow()
m_trashcan_open = Gdk::Pixbuf::create_from_xpm_data(trashcan_open_xpm);
m_trashcan_closed = Gdk::Pixbuf::create_from_xpm_data(trashcan_closed_xpm);
- //Targets:
- m_listTargets.push_back("STRING");
- m_listTargets.push_back("text/plain");
- m_listTargets.push_back("text/plain;charset=utf-8");
- if (!Glib::get_charset())
- {
- std::string charset;
- Glib::get_charset(charset);
- m_listTargets.push_back("text/plain;charset=" + charset);
- }
- m_listTargets.push_back("application/x-rootwin-drop");
-
- //Targets without rootwin:
- m_listTargetsNoRoot.assign(m_listTargets.begin(), --m_listTargets.end());
-
// Drop site
- auto formats = Gdk::ContentFormats::create(m_listTargetsNoRoot);
- auto dest = Gtk::DropTarget::create(formats, Gdk::DragAction::COPY | Gdk::DragAction::MOVE);
- dest->signal_drag_drop().connect(sigc::mem_fun(*this, &DnDWindow::on_label_drop_drag_drop), false);
+ const GType ustring_type = Glib::Value<Glib::ustring>::value_type();
+ auto dest = Gtk::DropTarget::create(ustring_type, Gdk::DragAction::COPY | Gdk::DragAction::MOVE);
+ dest->signal_drop().connect(sigc::mem_fun(*this, &DnDWindow::on_label_drop_drop), false);
m_Label_Drop.add_controller(dest);
m_Grid.attach(m_Label_Drop, 0, 0);
@@ -63,23 +48,21 @@ DnDWindow::DnDWindow()
// Popup site
- dest = Gtk::DropTarget::create(formats, Gdk::DragAction::COPY | Gdk::DragAction::MOVE);
- dest->signal_accept().connect(sigc::mem_fun(*this, &DnDWindow::on_label_popup_accept), false);
- dest->signal_drag_enter().connect(sigc::mem_fun(*this, &DnDWindow::on_label_popup_drag_enter));
- dest->signal_drag_leave().connect(sigc::mem_fun(*this, &DnDWindow::on_label_popup_drag_leave));
- m_Label_Popup.add_controller(dest);
+ auto controller = Gtk::DropControllerMotion::create();
+ controller->signal_enter().connect(sigc::mem_fun(*this, &DnDWindow::on_label_popup_enter));
+ controller->signal_leave().connect(sigc::mem_fun(*this, &DnDWindow::on_label_popup_leave));
+ m_Label_Popup.add_controller(controller);
m_Grid.attach(m_Label_Popup, 1, 1);
m_Label_Popup.set_expand(true);
// Image
- formats = Gdk::ContentFormats::create();
- dest = Gtk::DropTarget::create(formats, Gdk::DragAction::MOVE);
- dest->signal_accept().connect(sigc::mem_fun(*this, &DnDWindow::on_image_accept), false);
- dest->signal_drag_leave().connect(sigc::mem_fun(*this, &DnDWindow::on_image_drag_leave));
- dest->signal_drag_drop().connect(sigc::mem_fun(*this, &DnDWindow::on_image_drag_drop), false);
- m_Image.add_controller(dest);
+ auto async = Gtk::DropTargetAsync::create();
+ async->signal_drag_enter().connect(sigc::mem_fun(*this, &DnDWindow::on_image_drag_enter), false);
+ async->signal_drag_leave().connect(sigc::mem_fun(*this, &DnDWindow::on_image_drag_leave));
+ async->signal_drop().connect(sigc::mem_fun(*this, &DnDWindow::on_image_drop), false);
+ m_Image.add_controller(async);
m_Image.set(m_trashcan_closed);
@@ -126,11 +109,11 @@ void DnDWindow::create_popup()
pButton->set_expand(true);
pGrid->attach(*pButton, i, j);
- auto dest = Gtk::DropTarget::create(formats, Gdk::DragAction::COPY | Gdk::DragAction::MOVE);
- dest->signal_accept().connect(sigc::mem_fun(*this, &DnDWindow::on_button_popup_accept), false);
- dest->signal_drag_enter().connect(sigc::mem_fun(*this, &DnDWindow::on_button_popup_drag_enter));
- dest->signal_drag_leave().connect(sigc::mem_fun(*this, &DnDWindow::on_button_popup_drag_leave));
- dest->signal_drag_drop().connect(sigc::mem_fun(*this, &DnDWindow::on_button_popup_drag_drop), false);
+ const GType ustring_type = Glib::Value<Glib::ustring>::value_type();
+ auto dest = Gtk::DropTarget::create(ustring_type, Gdk::DragAction::COPY | Gdk::DragAction::MOVE);
+ dest->signal_enter().connect(sigc::mem_fun(*this, &DnDWindow::on_button_popup_enter), false);
+ dest->signal_leave().connect(sigc::mem_fun(*this, &DnDWindow::on_button_popup_leave));
+ dest->signal_drop().connect(sigc::mem_fun(*this, &DnDWindow::on_button_popup_drop), false);
pButton->add_controller(dest);
}
}
@@ -138,54 +121,41 @@ void DnDWindow::create_popup()
m_PopupWindow.add(*pGrid);
}
-bool DnDWindow::on_label_drop_drag_drop(const Glib::RefPtr<Gdk::Drop>& drop, int, int)
+bool DnDWindow::on_label_drop_drop(const Glib::ValueBase& value, double, double)
{
- drop->read_text_async(sigc::bind(sigc::mem_fun(*this, &DnDWindow::on_label_drop_got_data), drop));
- return true;
-}
-
-void DnDWindow::on_label_drop_got_data(Glib::RefPtr<Gio::AsyncResult>& result,
- const Glib::RefPtr<Gdk::Drop>& drop)
-{
- try
+ if (G_VALUE_HOLDS(value.gobj(), Glib::Value<Glib::ustring>::value_type()))
{
- const Glib::ustring dropped_string = drop->read_text_finish(result);
+ // We got the value type that we expected.
+ Glib::Value<Glib::ustring> ustring_value;
+ ustring_value.init(value.gobj());
+ const Glib::ustring dropped_string = ustring_value.get();
+
std::cout << "Received \"" << dropped_string << "\" in label " << std::endl;
- drop->finish(Gdk::DragAction::COPY);
+ return true;
}
- catch (const std::exception& ex)
+ else
{
- std::cout << "Drop failed: " << ex.what() << std::endl;
- drop->failed();
+ std::cout << "Received unexpected data type \""
+ << G_VALUE_TYPE_NAME(value.gobj()) << "\" in label " << std::endl;
+ return false;
}
}
-bool DnDWindow::on_label_popup_accept(const Glib::RefPtr<Gdk::Drop>& /* drop */)
-{
- return true;
-}
-
-void DnDWindow::on_label_popup_drag_enter(const Glib::RefPtr<Gdk::Drop>& /* drop */)
+void DnDWindow::on_label_popup_enter(double, double)
{
std::cout << "popsite enter" << std::endl;
if (!m_popup_timer)
m_popup_timer = Glib::signal_timeout().connect(sigc::mem_fun(*this, &DnDWindow::on_popup_timeout), 500);
}
-void DnDWindow::on_label_popup_drag_leave(const Glib::RefPtr<Gdk::Drop>& /* drop */)
+void DnDWindow::on_label_popup_leave()
{
std::cout << "popsite leave" << std::endl;
if (m_popup_timer)
m_popup_timer.disconnect();
}
-bool DnDWindow::on_button_popup_accept(const Glib::RefPtr<Gdk::Drop>& drop)
-{
- drop->status(Gdk::DragAction::COPY);
- return true;
-}
-
-void DnDWindow::on_button_popup_drag_enter(const Glib::RefPtr<Gdk::Drop>& /* drop */)
+Gdk::DragAction DnDWindow::on_button_popup_enter(double, double)
{
std::cout << "popup enter" << std::endl;
if (!m_in_popup)
@@ -197,9 +167,10 @@ void DnDWindow::on_button_popup_drag_enter(const Glib::RefPtr<Gdk::Drop>& /* dro
m_popdown_timer.disconnect();
}
}
+ return Gdk::DragAction::COPY;
}
-void DnDWindow::on_button_popup_drag_leave(const Glib::RefPtr<Gdk::Drop>& /* drop */)
+void DnDWindow::on_button_popup_leave()
{
std::cout << "popup leave" << std::endl;
if (m_in_popup)
@@ -213,65 +184,42 @@ void DnDWindow::on_button_popup_drag_leave(const Glib::RefPtr<Gdk::Drop>& /* dro
}
}
-bool DnDWindow::on_button_popup_drag_drop(const Glib::RefPtr<Gdk::Drop>& drop, int, int)
+bool DnDWindow::on_button_popup_drop(const Glib::ValueBase& /* value */, double, double)
{
- drop->finish(Gdk::DragAction::COPY);
on_popdown_timeout();
return true;
}
-bool DnDWindow::on_image_accept(const Glib::RefPtr<Gdk::Drop>& drop)
+Gdk::DragAction DnDWindow::on_image_drag_enter(const Glib::RefPtr<Gdk::Drop>& drop, double, double)
{
+ std::cout << "trashcan enter: " << drop->get_formats()->to_string() << std::endl;
+
if (!m_have_drag)
{
m_have_drag = true;
m_Image.set(m_trashcan_open);
}
- std::cout << drop->get_formats()->to_string() << std::endl;
-
- drop->status(Gdk::DragAction::MOVE);
- return true;
+ return Gdk::DragAction::MOVE;
}
-void DnDWindow::on_image_drag_leave(const Glib::RefPtr<Gdk::Drop>& /* drop */)
+void DnDWindow::on_image_drag_leave(const Glib::RefPtr<Gdk::Drop>& drop)
{
- std::cout << "trashcan leave" << std::endl;
+ std::cout << "trashcan leave: " << drop->get_formats()->to_string() << std::endl;
+
m_have_drag = false;
m_Image.set(m_trashcan_closed);
}
-bool DnDWindow::on_image_drag_drop(const Glib::RefPtr<Gdk::Drop>& drop, int, int)
+bool DnDWindow::on_image_drop(const Glib::RefPtr<Gdk::Drop>& drop, double, double)
{
- std::cout << "trashcan drop" << std::endl;
+ std::cout << "trashcan drop: " << drop->get_formats()->to_string() << std::endl;
m_have_drag = false;
m_Image.set(m_trashcan_closed);
- const auto targets = drop->get_formats()->get_mime_types();
- if (!targets.empty())
- {
- drop->read_text_async(sigc::bind(sigc::mem_fun(*this, &DnDWindow::on_image_got_data), drop));
- return true;
- }
- drop->status(static_cast<Gdk::DragAction>(0));
- return false;
-}
-
-void DnDWindow::on_image_got_data(Glib::RefPtr<Gio::AsyncResult>& result,
- const Glib::RefPtr<Gdk::Drop>& drop)
-{
- try
- {
- const Glib::ustring dropped_string = drop->read_text_finish(result);
- std::cout << "Received \"" << dropped_string << "\" in trashcan " << std::endl;
- drop->finish(Gdk::DragAction::MOVE);
- }
- catch (const std::exception& ex)
- {
- std::cout << "Drop failed: " << ex.what() << std::endl;
- drop->failed();
- }
+ drop->finish(Gdk::DragAction::MOVE);
+ return true;
}
void DnDWindow::on_label_drag_drag_end(const Glib::RefPtr<Gdk::Drag>& /* drag */,
diff --git a/examples/others/dnd/dndwindow.h b/examples/others/dnd/dndwindow.h
index a3eba3e..3b2df5c 100644
--- a/examples/others/dnd/dndwindow.h
+++ b/examples/others/dnd/dndwindow.h
@@ -30,24 +30,18 @@ protected:
void create_popup();
//Signal handlers and callback functions:
- bool on_label_drop_drag_drop(const Glib::RefPtr<Gdk::Drop>& drop, int x, int y);
- void on_label_drop_got_data(Glib::RefPtr<Gio::AsyncResult>& result,
- const Glib::RefPtr<Gdk::Drop>& drop);
+ bool on_label_drop_drop(const Glib::ValueBase& value, double x, double y);
- bool on_label_popup_accept(const Glib::RefPtr<Gdk::Drop>& drop);
- void on_label_popup_drag_enter(const Glib::RefPtr<Gdk::Drop>& drop);
- void on_label_popup_drag_leave(const Glib::RefPtr<Gdk::Drop>& drop);
+ void on_label_popup_enter(double x, double y);
+ void on_label_popup_leave();
- bool on_button_popup_accept(const Glib::RefPtr<Gdk::Drop>& drop);
- void on_button_popup_drag_enter(const Glib::RefPtr<Gdk::Drop>& drop);
- void on_button_popup_drag_leave(const Glib::RefPtr<Gdk::Drop>& drop);
- bool on_button_popup_drag_drop(const Glib::RefPtr<Gdk::Drop>& drop, int x, int y);
+ Gdk::DragAction on_button_popup_enter(double x, double y);
+ void on_button_popup_leave();
+ bool on_button_popup_drop(const Glib::ValueBase& value, double x, double y);
- bool on_image_accept(const Glib::RefPtr<Gdk::Drop>& drop);
+ Gdk::DragAction on_image_drag_enter(const Glib::RefPtr<Gdk::Drop>& drop, double x, double y);
void on_image_drag_leave(const Glib::RefPtr<Gdk::Drop>& drop);
- bool on_image_drag_drop(const Glib::RefPtr<Gdk::Drop>& drop, int x, int y);
- void on_image_got_data(Glib::RefPtr<Gio::AsyncResult>& result,
- const Glib::RefPtr<Gdk::Drop>& drop);
+ bool on_image_drop(const Glib::RefPtr<Gdk::Drop>& drop, double x, double y);
void on_label_drag_drag_end(const Glib::RefPtr<Gdk::Drag>& drag, bool delete_data);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]