[gtkmm] Gdk, Gtk: Add API for version 4.4



commit c831fa2913909151d87366a756cd63e405f9d839
Author: Kjell Ahlstedt <kjellahlstedt gmail com>
Date:   Wed Sep 8 15:34:19 2021 +0200

    Gdk, Gtk: Add API for version 4.4
    
    * configure.ac:
    * meson.build: Require gtk4 >= 4.4.0
    * gdk/src/contentformats.hg: Add parse().
    * gdk/src/display.hg: Add prepare_gl().
    * gdk/src/glcontext.hg: Add is_shared().
    * gtk/src/appchooserbutton.hg:
    * gtk/src/colorbutton.hg:
    * gtk/src/fontbutton.hg: Ignore the ::activate signal.
    * gtk/src/droptarget.[ccg|hg]: Add get_current_drop() and
    property_current_drop(). Deprecate get_drop() and property_drop().
    * gtk/src/filefilter.hg: Add add_suffix().
    * gtk/src/mediastream.[ccg|hg]: Add stream_prepared(), stream_unprepared()
    and stream_ended(). Deprecate prepared(), unprepared() and ended().
    * gtk/src/menubutton.hg: Add set/get/property_always_show_arrow() and
    set/get/property_primary(). Ignore the ::activate signal.
    * gtk/src/textview.hg: Add set/get_rtl_context() and set/get_ltr_context().

 configure.ac                |  2 +-
 gdk/src/contentformats.hg   |  6 +++---
 gdk/src/display.hg          | 22 ++++++++++++++++++++++
 gdk/src/glcontext.hg        |  6 +++---
 gtk/src/appchooserbutton.hg |  2 +-
 gtk/src/colorbutton.hg      |  1 +
 gtk/src/droptarget.ccg      | 19 -------------------
 gtk/src/droptarget.hg       | 29 +++++++++--------------------
 gtk/src/filefilter.hg       |  5 ++++-
 gtk/src/fontbutton.hg       |  1 +
 gtk/src/mediastream.ccg     | 26 --------------------------
 gtk/src/mediastream.hg      | 29 ++++++++---------------------
 gtk/src/menubutton.hg       | 10 ++++++++++
 gtk/src/textview.hg         |  5 +++++
 meson.build                 |  2 +-
 15 files changed, 69 insertions(+), 96 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index b3858715..3df09ab3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -95,7 +95,7 @@ AS_IF([test "x$enable_static" = xyes],
 # gdkmm really does need GTK, because part of Gdk::DragContext is in GTK.
 # The extra gdk-pixbuf-2.0 check is because gdkmm requires a newer gdk-pixbuf than gtk4 requires.
 # TODO: Remove the mention of cairomm once pangomm needs to depend on such a new version.
-AC_SUBST([GDKMM_MODULES], ['giomm-2.68 >= 2.68.0 pangomm-2.48 >= 2.48.0 cairomm-1.16 >= 1.15.4 gtk4 >= 4.2.0 
gdk-pixbuf-2.0 >= 2.35.5'])
+AC_SUBST([GDKMM_MODULES], ['giomm-2.68 >= 2.68.0 pangomm-2.48 >= 2.48.0 cairomm-1.16 >= 1.15.4 gtk4 >= 4.4.0 
gdk-pixbuf-2.0 >= 2.35.5'])
 
 AS_IF([test "x$gtkmm_host_windows" = xyes],
       [GTKMM_MODULES=$GDKMM_MODULES],
diff --git a/gdk/src/contentformats.hg b/gdk/src/contentformats.hg
index 6f0454e4..54ab1d87 100644
--- a/gdk/src/contentformats.hg
+++ b/gdk/src/contentformats.hg
@@ -95,11 +95,11 @@ public:
    */
   _WRAP_METHOD(static Glib::RefPtr<ContentFormats> create(GType type), gdk_content_formats_new_for_gtype)
 
+  _WRAP_METHOD(static Glib::RefPtr<ContentFormats> parse(const Glib::ustring& string), 
gdk_content_formats_parse)
+
   /** Prints the given %ContentFormats into a string for human consumption.
-   * This is meant for debugging and logging.
    *
-   * The form of the representation may change at any time and is
-   * not guranteed to stay identical.
+   * The resulting string can be parsed with parse().
    *
    * @return A new string.
    */
diff --git a/gdk/src/display.hg b/gdk/src/display.hg
index a8920bec..4b4f0d79 100644
--- a/gdk/src/display.hg
+++ b/gdk/src/display.hg
@@ -80,6 +80,28 @@ public:
   _WRAP_METHOD(Glib::RefPtr<const Clipboard> get_primary_clipboard() const, 
gdk_display_get_primary_clipboard, refreturn, constversion)
 
   _WRAP_METHOD(bool supports_input_shapes() const, gdk_display_supports_input_shapes)
+
+  /** Checks that OpenGL is available for this display and ensures that it is
+   * properly initialized.
+   *
+   * When this fails, an exception will be thrown describing the error.
+   *
+   * Note that even if this function succeeds, creating a `Gdk::GLContext`
+   * may still fail.
+   *
+   * This function is idempotent. Calling it multiple times will just 
+   * return the same value or error.
+   *
+   * You never need to call this function, GDK will call it automatically
+   * as needed. But you can use it as a check when setting up code that
+   * might make use of OpenGL.
+   *
+   * @newin{4,4}
+   *
+   * @throws Glib::Error
+   */
+  _WRAP_METHOD(void prepare_gl(), gdk_display_prepare_gl, errthrow)
+
   _WRAP_METHOD(void notify_startup_complete(const Glib::ustring& startup_id), 
gdk_display_notify_startup_complete)
   _WRAP_METHOD(Glib::ustring get_startup_notification_id() const, gdk_display_get_startup_notification_id)
 
diff --git a/gdk/src/glcontext.hg b/gdk/src/glcontext.hg
index 4b39ec93..3ec3de7b 100644
--- a/gdk/src/glcontext.hg
+++ b/gdk/src/glcontext.hg
@@ -52,8 +52,7 @@ public:
     refreturn, constversion, newin "3,18", deprecated "Always returns an empty RefPtr.")
   _WRAP_METHOD(void get_version(int& major, int& minor) const, gdk_gl_context_get_version, newin "3,18")
   _WRAP_METHOD(bool is_legacy() const, gdk_gl_context_is_legacy)
-  //TODO: Add is_shared() when gtkmm requires gtk >= 4.3.2
-  //_WRAP_METHOD(bool is_shared() const, gdk_gl_context_is_shared, newin "4,4")
+  _WRAP_METHOD(bool is_shared(const Glib::RefPtr<const GLContext>& other) const, gdk_gl_context_is_shared, 
newin "4,4")
   _WRAP_METHOD(void get_required_version(int& major, int& minor) const, gdk_gl_context_get_required_version, 
newin "3,18")
   _WRAP_METHOD(void set_required_version(int major, int minor), gdk_gl_context_set_required_version, newin 
"3,18")
   _WRAP_METHOD(bool get_debug_enabled() const, gdk_gl_context_get_debug_enabled, newin "3,18")
@@ -96,7 +95,8 @@ public:
   _WRAP_METHOD(static Glib::RefPtr<GLContext> get_current(), gdk_gl_context_get_current, refreturn, newin 
"3,18")
   _WRAP_METHOD(static void clear_current(), gdk_gl_context_clear_current, newin "3,18")
 
-  _WRAP_PROPERTY("shared-context", Glib::RefPtr<GLContext>, newin "3,18", deprecated "Always returns an 
empty RefPtr.")
+  _WRAP_PROPERTY("shared-context", Glib::RefPtr<GLContext>, newin "3,18",
+    deprecated "Always returns an empty RefPtr. Use is_shared() to check if contexts can be shared.")
 };
 
 } // namespace Gdk
diff --git a/gtk/src/appchooserbutton.hg b/gtk/src/appchooserbutton.hg
index b0bf4805..6e5aad1d 100644
--- a/gtk/src/appchooserbutton.hg
+++ b/gtk/src/appchooserbutton.hg
@@ -85,6 +85,7 @@ public:
   _WRAP_SIGNAL(void changed(), "changed", no_default_handler)
   _WRAP_SIGNAL(void custom_item_activated(const Glib::ustring& item_name), "custom-item-activated",
     detail_name custom_item_name, no_default_handler)
+  _IGNORE_SIGNAL("activate")dnl// Action signal
 
   _WRAP_PROPERTY("show-dialog-item", bool)
   _WRAP_PROPERTY("heading", Glib::ustring)
@@ -92,5 +93,4 @@ public:
   _WRAP_PROPERTY("modal", bool)
 };
 
-
 } // namespace Gtk
diff --git a/gtk/src/colorbutton.hg b/gtk/src/colorbutton.hg
index 2b8e80e4..1c25fb5c 100644
--- a/gtk/src/colorbutton.hg
+++ b/gtk/src/colorbutton.hg
@@ -80,6 +80,7 @@ public:
 
   // no_default_handler because GtkColorButtonClass is private.
   _WRAP_SIGNAL(void color_set(), "color-set", no_default_handler)
+  _IGNORE_SIGNAL("activate")dnl// Action signal
 };
 
 } // namespace Gtk
diff --git a/gtk/src/droptarget.ccg b/gtk/src/droptarget.ccg
index c50366c9..3f2fe850 100644
--- a/gtk/src/droptarget.ccg
+++ b/gtk/src/droptarget.ccg
@@ -41,23 +41,4 @@ Glib::ValueBase DropTarget::get_value() const
   return retvalue;
 }
 
-// We hand-code get_drop().
-// gtk_drop_target_get_drop() is deprecated in gtk 4.4.
-// We can't use the replacement gtk_drop_target_get_current_drop(),
-// which is new in gtk 4.4. This version of gtkmm does not require gtk 4.4.
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-Glib::RefPtr<Gdk::Drop> DropTarget::get_drop()
-{
-  auto retvalue = Glib::wrap(gtk_drop_target_get_drop(gobj()));
-  if(retvalue)
-    retvalue->reference(); //The function does not do a ref for us.
-  return retvalue;
-}
-
-Glib::RefPtr<const Gdk::Drop> DropTarget::get_drop() const
-{
-  return const_cast<DropTarget*>(this)->get_drop();
-}
-G_GNUC_END_IGNORE_DEPRECATIONS
-
 } // namesoace Gtk
diff --git a/gtk/src/droptarget.hg b/gtk/src/droptarget.hg
index 7560b3a7..05f7d4e9 100644
--- a/gtk/src/droptarget.hg
+++ b/gtk/src/droptarget.hg
@@ -89,22 +89,13 @@ public:
   _WRAP_METHOD(void set_preload(bool preload = true), gtk_drop_target_set_preload)
   _WRAP_METHOD(bool get_preload() const, gtk_drop_target_get_preload)
 
-  //TODO: Update in gtkmm 4.4.
-  // We hand-code get_drop(). gtk_drop_target_get_drop() is deprecated in gtk 4.4.
-  // We can't use the replacement gtk_drop_target_get_current_drop(),
-  // which is new in gtk 4.4. This version of gtkmm does not require gtk 4.4.
-  //_WRAP_METHOD(Glib::RefPtr<Gdk::Drop> get_drop(), gtk_drop_target_get_drop, refreturn,
-  //  deprecated "Use get_current_drop() instead.")
-  //_WRAP_METHOD(Glib::RefPtr<const Gdk::Drop> get_drop() const, gtk_drop_target_get_drop, refreturn, 
constversion,
-  //  deprecated "Use get_current_drop() instead.")
-  //_WRAP_METHOD(Glib::RefPtr<Gdk::Drop> get_current_drop(), gtk_drop_target_get_current_drop, refreturn, 
newin "4,4")
-  //_WRAP_METHOD(Glib::RefPtr<const Gdk::Drop> get_current_drop() const, gtk_drop_target_get_current_drop,
-  //   refreturn, constversion, newin "4,4")
-
-  _WRAP_METHOD_DOCS_ONLY(gtk_drop_target_get_drop)
-  Glib::RefPtr<Gdk::Drop> get_drop();
-  _WRAP_METHOD_DOCS_ONLY(gtk_drop_target_get_drop)
-  Glib::RefPtr<const Gdk::Drop> get_drop() const;
+  _WRAP_METHOD(Glib::RefPtr<Gdk::Drop> get_drop(), gtk_drop_target_get_drop, refreturn,
+    deprecated "Use get_current_drop() instead.")
+  _WRAP_METHOD(Glib::RefPtr<const Gdk::Drop> get_drop() const, gtk_drop_target_get_drop, refreturn, 
constversion,
+    deprecated "Use get_current_drop() instead.")
+  _WRAP_METHOD(Glib::RefPtr<Gdk::Drop> get_current_drop(), gtk_drop_target_get_current_drop, refreturn, 
newin "4,4")
+  _WRAP_METHOD(Glib::RefPtr<const Gdk::Drop> get_current_drop() const, gtk_drop_target_get_current_drop,
+     refreturn, constversion, newin "4,4")
 
   _WRAP_METHOD_DOCS_ONLY(gtk_drop_target_get_value)
   Glib::ValueBase get_value() const;
@@ -112,10 +103,8 @@ public:
   _WRAP_METHOD(void reject(), gtk_drop_target_reject)
 
   _WRAP_PROPERTY("actions", Gdk::DragAction)
-  //TODO: Update in gtkmm 4.4.
-  //_WRAP_PROPERTY("drop", Glib::RefPtr<Gdk::Drop>, deprecated "Use property_current_drop() instead.")
-  //_WRAP_PROPERTY("current-drop", Glib::RefPtr<Gdk::Drop>, newin "4,4")
-  _WRAP_PROPERTY("drop", Glib::RefPtr<Gdk::Drop>)
+  _WRAP_PROPERTY("drop", Glib::RefPtr<Gdk::Drop>, deprecated "Use property_current_drop() instead.")
+  _WRAP_PROPERTY("current-drop", Glib::RefPtr<Gdk::Drop>, newin "4,4")
   _WRAP_PROPERTY("formats", Glib::RefPtr<Gdk::ContentFormats>)
   _WRAP_PROPERTY("preload", bool)
   _WRAP_PROPERTY("value", GValue*)
diff --git a/gtk/src/filefilter.hg b/gtk/src/filefilter.hg
index 50e4437c..8f0a83e9 100644
--- a/gtk/src/filefilter.hg
+++ b/gtk/src/filefilter.hg
@@ -17,6 +17,7 @@
 
 #include <gtkmm/filter.h>
 #include <gtkmm/buildable.h>
+#include <string>
 
 _DEFS(gtkmm,gtk)
 _PINCLUDE(gtkmm/private/filter_p.h)
@@ -53,10 +54,12 @@ public:
   _WRAP_METHOD(Glib::ustring get_name() const, gtk_file_filter_get_name)
 
   _WRAP_METHOD(void add_mime_type(const Glib::ustring& mime_type), gtk_file_filter_add_mime_type)
+  //TODO: When we can change ABI/API: const std::string& pattern.
   _WRAP_METHOD(void add_pattern(const Glib::ustring& pattern), gtk_file_filter_add_pattern)
+  _WRAP_METHOD(void add_suffix(const std::string& suffix), gtk_file_filter_add_suffix)
   _WRAP_METHOD(void add_pixbuf_formats(), gtk_file_filter_add_pixbuf_formats)
 
-  // This is meant for implementors of FileChooser, so we don’t wrap them.
+  // This is meant for implementors of FileChooser, so we don’t wrap it.
   _IGNORE(gtk_file_filter_get_attributes)
 
   _WRAP_PROPERTY("name", Glib::ustring)
diff --git a/gtk/src/fontbutton.hg b/gtk/src/fontbutton.hg
index ce2f35dd..9c8e6f34 100644
--- a/gtk/src/fontbutton.hg
+++ b/gtk/src/fontbutton.hg
@@ -63,6 +63,7 @@ public:
 
   // no_default_handler because GtkFontButtonClass is private.
   _WRAP_SIGNAL(void font_set(), "font-set", no_default_handler)
+  _IGNORE_SIGNAL("activate")dnl// Action signal
 };
 
 } // namespace Gtk
diff --git a/gtk/src/mediastream.ccg b/gtk/src/mediastream.ccg
index c328ea0c..2dd04866 100644
--- a/gtk/src/mediastream.ccg
+++ b/gtk/src/mediastream.ccg
@@ -15,29 +15,3 @@
  */
 
 #include <gtk/gtk.h>
-
-namespace Gtk
-{
-
-// We hand-code prepared(), unprepared() and ended(). gtk_media_stream_prepared(),
-// gtk_media_stream_unprepared() and gtk_media_stream_ended() are deprecated in gtk 4.4.
-// We can't use the replacements gtk_media_stream_set_prepared(), gtk_media_stream_unset_prepared()
-// and gtk_media_stream_set_ended(), which are new in gtk 4.4. This version of gtkmm does not require gtk 
4.4.
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-void MediaStream::prepared(bool has_audio, bool has_video, bool seekable, gint64 duration)
-{
-  gtk_media_stream_prepared(gobj(), static_cast<int>(has_audio), static_cast<int>(has_video), 
static_cast<int>(seekable), duration);
-}
-
-void MediaStream::unprepared()
-{
-  gtk_media_stream_unprepared(gobj());
-}
-
-void MediaStream::ended()
-{
-  gtk_media_stream_ended(gobj());
-}
-G_GNUC_END_IGNORE_DEPRECATIONS
-
-} // namesoace Gtk
diff --git a/gtk/src/mediastream.hg b/gtk/src/mediastream.hg
index ef8fa815..0e8015b7 100644
--- a/gtk/src/mediastream.hg
+++ b/gtk/src/mediastream.hg
@@ -82,30 +82,17 @@ public:
 
   // For implementations only
 
-  //TODO: Update in gtkmm 4.4.
-  // We hand-code prepared(), unprepared() and ended(). gtk_media_stream_prepared(),
-  // gtk_media_stream_unprepared() and gtk_media_stream_ended() are deprecated in gtk 4.4.
-  // We can't use the replacements gtk_media_stream_set_prepared(), gtk_media_stream_unset_prepared()
-  // and gtk_media_stream_set_ended(), which are new in gtk 4.4. This version of gtkmm does not require gtk 
4.4.
-  //_WRAP_METHOD(void prepared(bool has_audio, bool has_video, bool seekable, gint64 duration),
-  //  gtk_media_stream_prepared, deprecated "Use set_prepared() instead.")
-  //_WRAP_METHOD(void unprepared(), gtk_media_stream_unprepared, deprecated "Use unset_prepared() instead.")
-  //_WRAP_METHOD(void set_prepared(bool has_audio, bool has_video, bool seekable, gint64 duration),
-  //   gtk_media_stream_set_prepared, newin "4,4")
-  //_WRAP_METHOD(void unprepared(), gtk_media_stream_unset_prepared, newin "4,4")
-
-  _WRAP_METHOD_DOCS_ONLY(gtk_media_stream_prepared)
-  void prepared(bool has_audio, bool has_video, bool seekable, gint64 duration);
-  _WRAP_METHOD_DOCS_ONLY(gtk_media_stream_unprepared)
-  void unprepared();
+  _WRAP_METHOD(void prepared(bool has_audio, bool has_video, bool seekable, gint64 duration),
+    gtk_media_stream_prepared, deprecated "Use stream_prepared() instead.")
+  _WRAP_METHOD(void unprepared(), gtk_media_stream_unprepared, deprecated "Use stream_unprepared() instead.")
+  _WRAP_METHOD(void stream_prepared(bool has_audio, bool has_video, bool seekable, gint64 duration),
+     gtk_media_stream_stream_prepared, newin "4,4")
+  _WRAP_METHOD(void stream_unprepared(), gtk_media_stream_stream_unprepared, newin "4,4")
 
   _WRAP_METHOD(void update(gint64 timestamp), gtk_media_stream_update)
 
-  //TODO: Update in gtkmm 4.4.
-  //_WRAP_METHOD(void ended(), gtk_media_stream_ended, deprecated "Use set_ended() instead.")
-  //_WRAP_METHOD(void set_ended(), gtk_media_stream_set_ended, newin "4,4")
-  _WRAP_METHOD_DOCS_ONLY(gtk_media_stream_ended)
-  void ended();
+  _WRAP_METHOD(void ended(), gtk_media_stream_ended, deprecated "Use stream_ended() instead.")
+  _WRAP_METHOD(void stream_ended(), gtk_media_stream_stream_ended, newin "4,4")
 
   _WRAP_METHOD(void seek_success(), gtk_media_stream_seek_success)
   _WRAP_METHOD(void seek_failed(), gtk_media_stream_seek_failed)
diff --git a/gtk/src/menubutton.hg b/gtk/src/menubutton.hg
index ca705ea7..92759c84 100644
--- a/gtk/src/menubutton.hg
+++ b/gtk/src/menubutton.hg
@@ -69,6 +69,9 @@ public:
   _WRAP_METHOD(void set_icon_name(const Glib::ustring& icon_name), gtk_menu_button_set_icon_name)
   _WRAP_METHOD(Glib::ustring get_icon_name() const, gtk_menu_button_get_icon_name)
 
+  _WRAP_METHOD(void set_always_show_arrow(bool always_show_arrow = true), 
gtk_menu_button_set_always_show_arrow)
+  _WRAP_METHOD(bool get_always_show_arrow() const, gtk_menu_button_get_always_show_arrow)
+
   _WRAP_METHOD(void set_label(const Glib::ustring& label), gtk_menu_button_set_label)
   _WRAP_METHOD(Glib::ustring get_label() const, gtk_menu_button_get_label)
 
@@ -113,13 +116,20 @@ public:
    */
   void unset_create_popup_func();
 
+  _WRAP_METHOD(void set_primary(bool primary = true), gtk_menu_button_set_primary)
+  _WRAP_METHOD(bool get_primary() const, gtk_menu_button_get_primary)
+
+  _IGNORE_SIGNAL("activate")dnl// Action signal
+
   _WRAP_PROPERTY("menu-model", Glib::RefPtr<Gio::MenuModel>)
   _WRAP_PROPERTY("direction", ArrowType)
   _WRAP_PROPERTY("popover", Popover*)
   _WRAP_PROPERTY("icon-name", Glib::ustring)
+  _WRAP_PROPERTY("always-show-arrow", bool)
   _WRAP_PROPERTY("label", Glib::ustring)
   _WRAP_PROPERTY("use-underline", bool)
   _WRAP_PROPERTY("has-frame", bool)
+  _WRAP_PROPERTY("primary", bool)
 };
 
 } /* namespace Gtk */
diff --git a/gtk/src/textview.hg b/gtk/src/textview.hg
index 257610e6..05bdef6c 100644
--- a/gtk/src/textview.hg
+++ b/gtk/src/textview.hg
@@ -216,6 +216,11 @@ public:
   _WRAP_METHOD(Glib::RefPtr<Gio::MenuModel> get_extra_menu(), gtk_text_view_get_extra_menu, refreturn)
   _WRAP_METHOD(Glib::RefPtr<const Gio::MenuModel> get_extra_menu() const, gtk_text_view_get_extra_menu, 
refreturn, constversion)
 
+  _WRAP_METHOD(Glib::RefPtr<Pango::Context> get_rtl_context(), gtk_text_view_get_rtl_context, refreturn)
+  _WRAP_METHOD(Glib::RefPtr<const Pango::Context> get_rtl_context() const, gtk_text_view_get_rtl_context, 
refreturn, constversion)
+  _WRAP_METHOD(Glib::RefPtr<Pango::Context> get_ltr_context(), gtk_text_view_get_ltr_context, refreturn)
+  _WRAP_METHOD(Glib::RefPtr<const Pango::Context> get_ltr_context() const, gtk_text_view_get_ltr_context, 
refreturn, constversion)
+
   _WRAP_SIGNAL(void set_anchor(), "set_anchor")
 
 #m4 _CONVERSION(`const char*',`const Glib::ustring&',__GCHARP_TO_USTRING)
diff --git a/meson.build b/meson.build
index d2908818..4c972063 100644
--- a/meson.build
+++ b/meson.build
@@ -103,7 +103,7 @@ install_pkgconfigdir = install_libdir / 'pkgconfig'
 glibmm_req = '>= 2.68.0'
 
 # Gtk supported pkg-config files on MSVC files for a good while, so just use that
-gtk_req = '>= 4.2.0'
+gtk_req = '>= 4.4.0'
 gtk_dep = dependency('gtk4', version: gtk_req)
 
 cairomm_req = '>= 1.15.4'


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]