// Generated by gmmproc 2.82.0 -- DO NOT MODIFY! #ifndef _GTKMM_WIDGET_H #define _GTKMM_WIDGET_H #include #include #include /* Copyright (C) 2002, 2003 The gtkmm Development Team * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef DOXYGEN_SHOULD_SKIP_THIS using GtkWidget = struct _GtkWidget; using GtkWidgetClass = struct _GtkWidgetClass; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ #ifndef DOXYGEN_SHOULD_SKIP_THIS namespace Gtk { class GTKMM_API Widget_Class; } // namespace Gtk #endif //DOXYGEN_SHOULD_SKIP_THIS namespace Gio { class GTKMM_API ListModel; } namespace Gdk { class GTKMM_API FrameClock; class GTKMM_API Paintable; } namespace Gtk { class GTKMM_API Adjustment; class GTKMM_API Window; class GTKMM_API Root; class GTKMM_API Native; class GTKMM_API EventController; class GTKMM_API LayoutManager; class GTKMM_API Settings; class GTKMM_API Snapshot; class GTKMM_API Tooltip; // Gtk::Allocation is a typedef of Gdk::Rectangle because GtkAllocation is // a typedef of GdkRectangle. typedef Gdk::Rectangle Allocation; /** @defgroup Widgets Widgets */ /** @defgroup Containers Container Widgets * These widgets can be used to group other widgets together. */ //TODO: Deal with the GtkObject->GObject change: /** Abstract %Widget (Base class for all widgets) * * As the base class of all widgets this contains all of the properties * and methods common to all widgets. It manages the widget lifecycle, layout, * states and style. It is an abstract class that cannot be instantiated. * * An important part of widgets are events that can be trapped by adding * event controllers with add_controller(). Those are events coming directly * from GDK. By using event controllers you can trap everything a widget * can ever do. The @ref Gestures group lists the event controller classes. * * Most widgets are added as children to a container widget, such as a * Box, Grid or Window. A child widget can be managed or non-managed. * A managed widget is created with the Gtk::make_managed() template function. * Such a widget is deleted when its parent container is deleted. * By default widgets are non-managed. This is fine for widgets declared * as data members of a class. They are not deleted when their parent is * deleted, but when the containing class instance is deleted. * Memory management of widgets is described in more detail in the * [Memory management](https://gnome.pages.gitlab.gnome.org/gtkmm-documentation/chapter-memory.html#sec-memory-widgets) * chapter in the Programming with gtkmm book. */ class GTKMM_API Widget : public Object, public Accessible, public Buildable, public ConstraintTarget { public: #ifndef DOXYGEN_SHOULD_SKIP_THIS typedef Widget CppObjectType; typedef Widget_Class CppClassType; typedef GtkWidget BaseObjectType; typedef GtkWidgetClass BaseClassType; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ Widget(Widget&& src) noexcept; Widget& operator=(Widget&& src) noexcept; // noncopyable Widget(const Widget&) = delete; Widget& operator=(const Widget&) = delete; /** Destroys the widget. Except: if the widget has a parent, only the C++ wrapper is destroyed, not the C instance; * please see the “Memory management” chapter in the Programming with gtkmm book as linked in the intro. */ ~Widget() noexcept override; #ifndef DOXYGEN_SHOULD_SKIP_THIS private: friend GTKMM_API class Widget_Class; static CppClassType widget_class_; protected: explicit Widget(const Glib::ConstructParams& construct_params); explicit Widget(GtkWidget* castitem); #endif /* DOXYGEN_SHOULD_SKIP_THIS */ public: /** Get the GType for this class, for use with the underlying GObject type system. */ static GType get_type() G_GNUC_CONST; #ifndef DOXYGEN_SHOULD_SKIP_THIS static GType get_base_type() G_GNUC_CONST; #endif /// Provides access to the underlying C GObject. GtkWidget* gobj() { return reinterpret_cast(gobject_); } /// Provides access to the underlying C GObject. const GtkWidget* gobj() const { return reinterpret_cast(gobject_); } private: public: /** Converts this widget to a reference counted Gtk::ConstraintTarget. * Useful in calls to Gtk::Constraint::create(). */ Glib::RefPtr make_refptr_constrainttarget(); /** Converts this widget to a reference counted Gtk::ConstraintTarget. */ Glib::RefPtr make_refptr_constrainttarget() const; #ifndef GTKMM_DISABLE_DEPRECATED /** Flags a widget to be displayed. * * Any widget that isn’t shown will not appear on the screen. * * Remember that you have to show the containers containing a widget, * in addition to the widget itself, before it will appear onscreen. * * When a toplevel container is shown, it is immediately realized and * mapped; other shown widgets are realized and mapped when their * toplevel container is realized and mapped. * * Deprecated: 4.10: Use set_visible() instead * * @deprecated Use set_visible() instead. */ void show(); #endif // GTKMM_DISABLE_DEPRECATED #ifndef GTKMM_DISABLE_DEPRECATED /** Reverses the effects of show(). * * This is causing the widget to be hidden (invisible to the user). * * Deprecated: 4.10: Use set_visible() instead * * @deprecated Use set_visible() instead. */ void hide(); #endif // GTKMM_DISABLE_DEPRECATED /* QUEUE DRAWS */ /** Schedules this widget to be redrawn in the paint phase * of the current or the next frame. * * This means @a widget's snapshot_vfunc() * implementation will be called. */ void queue_draw(); /** Flags a widget to have its size renegotiated. * * This should be called when a widget for some reason has a new * size request. For example, when you change the text in a * Gtk::Label, the label queues a resize to ensure there’s * enough space for the new text. * * Note that you cannot call queue_resize() on a widget * from inside its implementation of the size_allocate_vfunc() * virtual method. Calls to queue_resize() from inside * size_allocate_vfunc() will be silently ignored. * * This function is only for use in widget implementations. */ void queue_resize(); /** Flags the widget for a rerun of the size_allocate_vfunc() * function. * * Use this function instead of queue_resize() * when the @a widget's size request didn't change but it wants to * reposition its contents. * * An example user of this function is set_halign(). * * This function is only for use in widget implementations. */ void queue_allocate(); /** Allocates widget with a transformation that translates * the origin to the position in @a allocation. * * This is a simple form of allocate(). * * @param allocation Position and size to be allocated to @a widget. * @param baseline The baseline of the child, or -1. */ void size_allocate(const Allocation& allocation, int baseline); /** Gets whether the widget prefers a height-for-width layout * or a width-for-height layout. * * Single-child widgets generally propagate the preference of * their child, more complex widgets need to request something * either in context of their children or in context of their * allocation capabilities. * * @return The `Gtk::SizeRequestMode` preferred by @a widget. */ SizeRequestMode get_request_mode() const; /** Structure holding the minimum and natural sizes of a widget, in some type. * @newin{4,14} */ template struct MinimumNatural final { T minimum, natural; }; /** Measures @a widget in the orientation @a orientation and for the given @a for_size. * * As an example, if @a orientation is Gtk::Orientation::HORIZONTAL and @a for_size * is 300, this functions will compute the minimum and natural width of @a widget * if it is allocated at a height of 300 pixels. * * See [GtkWidget’s geometry management section](class.Widget.html#height-for-width-geometry-management) for * a more details on implementing `GtkWidgetClass.measure()`. * * @param orientation The orientation to measure. * @param for_size Size for the opposite of @a orientation, i.e. * if @a orientation is Gtk::Orientation::HORIZONTAL, this is * the height the widget should be measured with. The Gtk::Orientation::VERTICAL * case is analogous. This way, both height-for-width and width-for-height * requests can be implemented. If no size is known, -1 can be passed. * @param minimum Location to store the minimum size. * @param natural Location to store the natural size. * @param minimum_baseline Location to store the baseline * position for the minimum size, or -1 to report no baseline. * @param natural_baseline Location to store the baseline * position for the natural size, or -1 to report no baseline. */ void measure(Orientation orientation, int for_size, int& minimum, int& natural, int& minimum_baseline, int& natural_baseline) const; /** Structure returned by the non-output-parameter overload of measure(). * @newin{4,14} */ struct Measurements final { MinimumNatural sizes, baselines; }; /** Like the other overload of measure() but returns a structure holding the sizes/baselines instead of using output parameters. * @newin{4,14} */ [[nodiscard]] Measurements measure(Orientation orientation, int for_size = -1) const; /** Retrieves the minimum and natural size of a widget, taking * into account the widget’s preference for height-for-width management. * * This is used to retrieve a suitable size by container widgets which do * not impose any restrictions on the child placement. It can be used * to deduce toplevel window and menu sizes as well as child widgets in * free-form containers such as `Gtk::Fixed`. * * Handle with care. Note that the natural height of a height-for-width * widget will generally be a smaller size than the minimum height, since * the required height for the natural width is generally smaller than the * required height for the minimum width. * * Use measure() if you want to support baseline alignment. * * @param minimum_size Location for storing the minimum size. * @param natural_size Location for storing the natural size. */ void get_preferred_size(Requisition& minimum_size, Requisition& natural_size) const; /** Structure returned by the non-output-parameter overload of get_preferred_size(). * @newin{4,14} */ using PreferredSize = MinimumNatural; /** Like the other overload of get_preferred_size() but returns a structure holding the sizes instead of using output parameters. * @newin{4,14} */ [[nodiscard]] PreferredSize get_preferred_size() const; /** Sets the layout manager delegate instance that provides an * implementation for measuring and allocating the children of @a widget. * * @param layout_manager A `Gtk::LayoutManager`. */ void set_layout_manager(const Glib::RefPtr& layout_manager); /** Undoes the effect of a previous call to set_layout_manager(). */ void unset_layout_manager(); /** Retrieves the layout manager used by @a widget. * * See set_layout_manager(). * * @return A `Gtk::LayoutManager`. */ Glib::RefPtr get_layout_manager(); /** Retrieves the layout manager used by @a widget. * * See set_layout_manager(). * * @return A `Gtk::LayoutManager`. */ Glib::RefPtr get_layout_manager() const; /** Emits the signal_mnemonic_activate() signal. * * See signal_mnemonic_activate(). * * @param group_cycling true if there are other widgets with the same mnemonic. * @return true if the signal has been handled. */ bool mnemonic_activate(bool group_cycling); /** For widgets that can be “activated” (buttons, menu items, etc.) * this function activates them. * * The activation will emit the signal set using * gtk_widget_class_set_activate_signal() during class initialization. * * Activation is what happens when you press Enter on a widget during * key navigation. * * If you wish to handle the activation keybinding yourself, it is * recommended to use gtk_widget_class_add_shortcut() with an action * created with Gtk::SignalAction::create(). * * @return true if the widget was activatable, else false. */ bool activate(); /** Specifies whether the input focus can enter the widget * or any of its children. * * Applications should set @a can_focus to false to mark a * widget as for pointer/touch use only. * * Note that having @a can_focus be true is only one of the * necessary conditions for being focusable. A widget must * also be sensitive and focusable and not have an ancestor * that is marked as not can-focus in order to receive input * focus. * * See grab_focus() for actually setting * the input focus on a widget. * * @param can_focus Whether or not the input focus can enter * the widget or any of its children. */ void set_can_focus(bool can_focus = true); /** Determines whether the input focus can enter @a widget or any * of its children. * * See set_focusable(). * * @return true if the input focus can enter @a widget, false otherwise. */ bool get_can_focus() const; /** Specifies whether @a widget can own the input focus. * * Widget implementations should set @a focusable to true in * their init() function if they want to receive keyboard input. * * Note that having @a focusable be true is only one of the * necessary conditions for being focusable. A widget must * also be sensitive and can-focus and not have an ancestor * that is marked as not can-focus in order to receive input * focus. * * See grab_focus() for actually setting * the input focus on a widget. * * @param focusable Whether or not @a widget can own the input focus. */ void set_focusable(bool focusable = true); /** Determines whether @a widget can own the input focus. * * See set_focusable(). * * @return true if @a widget can own the input focus, false otherwise. */ bool get_focusable() const; /** Determines if the widget has the global input focus. * * See is_focus() for the difference between * having the global input focus, and only having the focus * within a toplevel. * * @return true if the widget has the global input focus. */ bool has_focus() const; /** Determines if the widget is the focus widget within its * toplevel. * * This does not mean that the property_has_focus() * property is necessarily set; property_has_focus() * will only be set if the toplevel widget additionally has the * global input focus. * * @return true if the widget is the focus widget. */ bool is_focus() const; /** Determines if the widget should show a visible indication that * it has the global input focus. * * This is a convenience function that takes into account whether * focus indication should currently be shown in the toplevel window * of @a widget. See Gtk::Window::get_focus_visible() for more * information about focus indication. * * To find out if the widget has the global input focus, use * has_focus(). * * @return true if the widget should display a “focus rectangle”. */ bool has_visible_focus() const; /** Causes @a widget to have the keyboard focus for the `Gtk::Window` it's inside. * * If @a widget is not focusable, or its grab_focus_vfunc() * implementation cannot transfer the focus to a descendant of @a widget * that is focusable, it will not take focus and false will be returned. * * Calling grab_focus() on an already focused widget * is allowed, should not have an effect, and return true. * * @return true if focus is now inside @a widget. */ bool grab_focus(); /** Sets whether the widget should grab focus when it is clicked * with the mouse. * * Making mouse clicks not grab focus is useful in places like * toolbars where you don’t want the keyboard focus removed from * the main area of the application. * * @param focus_on_click Whether the widget should grab focus when clicked * with the mouse. */ void set_focus_on_click(bool focus_on_click = true); /** Returns whether the widget should grab focus when it is clicked * with the mouse. * * See set_focus_on_click(). * * @return true if the widget should grab focus when it is * clicked with the mouse. */ bool get_focus_on_click() const; /** Sets whether @a widget can be the target of pointer events. * * @param can_target Whether this widget should be able to * receive pointer events. */ void set_can_target(bool can_target = true); /** Queries whether @a widget can be the target of pointer events. * * @return true if @a widget can receive pointer events. */ bool get_can_target() const; /** Determines whether @a widget is the current default widget * within its toplevel. * * @return true if @a widget is the current default widget * within its toplevel, false otherwise. */ bool has_default() const; /** Specifies whether @a widget will be treated as the default * widget within its toplevel when it has the focus, even if * another widget is the default. * * @param receives_default Whether or not @a widget can be a default widget. */ void set_receives_default(bool receives_default = true); /** Determines whether @a widget is always treated as the default widget * within its toplevel when it has the focus, even if another widget * is the default. * * See set_receives_default(). * * @return true if @a widget acts as the default widget when focused, * false otherwise. */ bool get_receives_default() const; /** Sets a widgets name. * * Setting a name allows you to refer to the widget from a * CSS file. You can apply a style to widgets with a particular name * in the CSS file. See the documentation for the CSS syntax (on the * same page as the docs for Gtk::StyleContext. * * Note that the CSS syntax has certain special characters to delimit * and represent elements in a selector (period, #, >, *...), so using * these will make your widget impossible to match by name. Any combination * of alphanumeric symbols, dashes and underscores will suffice. * * @param name Name for the widget. */ void set_name(const Glib::ustring& name); void unset_name(); /** Retrieves the name of a widget. * * See set_name() for the significance of widget names. * * @return Name of the widget. This string is owned by GTK and * should not be modified or freed. */ Glib::ustring get_name() const; /** Turns on flag values in the current widget state. * * Typical widget states are insensitive, prelighted, etc. * * This function accepts the values Gtk::StateFlags::DIR_LTR and * Gtk::StateFlags::DIR_RTL but ignores them. If you want to set * the widget's direction, use set_direction(). * * This function is for use in widget implementations. * * @param flags State flags to turn on. * @param clear Whether to clear state before turning on @a flags. */ void set_state_flags(StateFlags flags, bool clear = true); /** Turns off flag values for the current widget state. * * See set_state_flags(). * * This function is for use in widget implementations. * * @param flags State flags to turn off. */ void unset_state_flags(StateFlags flags); /** Returns the widget state as a flag set. * * It is worth mentioning that the effective Gtk::StateFlags::INSENSITIVE * state will be returned, that is, also based on parent insensitivity, * even if @a widget itself is sensitive. * * Also note that if you are looking for a way to obtain the * Gtk::StateFlags to pass to a Gtk::StyleContext * method, you should look at Gtk::StyleContext::get_state(). * * @return The state flags for widget. */ StateFlags get_state_flags() const; /** Sets the sensitivity of a widget. * * A widget is sensitive if the user can interact with it. * Insensitive widgets are “grayed out” and the user can’t * interact with them. Insensitive widgets are known as * “inactive”, “disabled”, or “ghosted” in some other toolkits. * * @param sensitive true to make the widget sensitive. */ void set_sensitive(bool sensitive = true); /** Returns the widget’s sensitivity. * * This function returns the value that has been set using * set_sensitive()). * * The effective sensitivity of a widget is however determined * by both its own and its parent widget’s sensitivity. * See is_sensitive(). * * @return true if the widget is sensitive. */ bool get_sensitive() const; /** Returns the widget’s effective sensitivity. * * This means it is sensitive itself and also its * parent widget is sensitive. * * @return true if the widget is effectively sensitive. */ bool is_sensitive() const; /** Sets the visibility state of @a widget. * * Note that setting this to true doesn’t mean the widget is * actually viewable, see get_visible(). * * @param visible Whether the widget should be shown or not. */ void set_visible(bool visible = true); /** Determines whether the widget is visible. * * If you want to take into account whether the widget’s * parent is also marked as visible, use * is_visible() instead. * * This function does not check if the widget is * obscured in any way. * * See set_visible(). * * @return true if the widget is visible. */ bool get_visible() const; /** Determines whether the widget and all its parents are marked as * visible. * * This function does not check if the widget is obscured in any way. * * See also get_visible() and * set_visible(). * * @return true if the widget and all its parents are visible. */ bool is_visible() const; /** Determines whether @a widget can be drawn to. * * A widget can be drawn if it is mapped and visible. * * @return true if @a widget is drawable, false otherwise. */ bool is_drawable() const; /** Determines whether @a widget is realized. * * @return true if @a widget is realized, false otherwise. */ bool get_realized() const; /** Whether the widget is mapped. * * @return true if the widget is mapped, false otherwise. */ bool get_mapped() const; /** Sets whether @a widget should be mapped along with its parent. * * The child visibility can be set for widget before it is added * to a container with set_parent(), to avoid * mapping children unnecessary before immediately unmapping them. * However it will be reset to its default state of true when the * widget is removed from a container. * * Note that changing the child visibility of a widget does not * queue a resize on the widget. Most of the time, the size of * a widget is computed from all visible children, whether or * not they are mapped. If this is not the case, the container * can queue a resize itself. * * This function is only useful for container implementations * and should never be called by an application. * * @param visible If true, @a widget should be mapped along * with its parent. */ void set_child_visible(bool visible = true); /** Gets the value set with set_child_visible(). * * If you feel a need to use this function, your code probably * needs reorganization. * * This function is only useful for container implementations * and should never be called by an application. * * @return true if the widget is mapped with the parent. */ bool get_child_visible() const; #ifndef GTKMM_DISABLE_DEPRECATED /** Returns the width that has currently been allocated to @a widget. * * To learn more about widget sizes, see the coordinate * system [overview](coordinates.html). * * Deprecated: 4.12: Use get_width() instead * * @deprecated Use get_width() instead. * * @return The width of the @a widget. */ int get_allocated_width() const; #endif // GTKMM_DISABLE_DEPRECATED #ifndef GTKMM_DISABLE_DEPRECATED /** Returns the height that has currently been allocated to @a widget. * * To learn more about widget sizes, see the coordinate * system [overview](coordinates.html). * * Deprecated: 4.12: Use get_height() instead * * @deprecated Use get_height() instead. * * @return The height of the @a widget. */ int get_allocated_height() const; #endif // GTKMM_DISABLE_DEPRECATED #ifndef GTKMM_DISABLE_DEPRECATED /** Returns the baseline that has currently been allocated to @a widget. * * This function is intended to be used when implementing handlers * for the `Gtk::Widget`Class.snapshot() function, and when allocating * child widgets in `Gtk::Widget`Class.size_allocate(). * * Deprecated: 4.12: Use get_baseline() instead * * @deprecated Use get_baseline() instead. * * @return The baseline of the @a widget, or -1 if none. */ int get_allocated_baseline() const; #endif // GTKMM_DISABLE_DEPRECATED #ifndef GTKMM_DISABLE_DEPRECATED /** Retrieves the widget’s location. * Note, when implementing a layout container: a widget’s allocation will be its “adjusted” allocation, * that is, the widget’s parent container typically calls size_allocate() with an allocation, * and that allocation is then adjusted (to handle margin and alignment for example) before * assignment to the widget. get_allocation() returns the adjusted allocation that was actually * assigned to the widget. The adjusted allocation is guaranteed to be completely contained * within the size_allocate() allocation, however. * * So a layout container is guaranteed that its children stay inside the assigned bounds, but not that * they have exactly the bounds the container assigned. * * @deprecated 4.12: Use compute_bounds() or get_width() instead. * * @return The widget’s allocated area. */ Allocation get_allocation() const; #endif // GTKMM_DISABLE_DEPRECATED /** Computes the bounds for the widget in the coordinate space of @a target. * * The bounds of widget are (the bounding box of) the region that it is * expected to draw in. * * If the operation is successful, a std::optional * that contains a value is returned. If the widget has no bounds or the * bounds cannot be expressed in @a target's coordinate space (for example * if both widgets are in different windows), the returned std::optional * is empty. * * It is valid for the widget and @a target to be the same widget. * * @newin{4,12} * * @param target The `Gtk::Widget`. * @return A std::optional, containing a value if the * bounds could be computed. */ std::optional compute_bounds(const Widget& target) const; /** Translates the given @a point in the widget's coordinates to coordinates * relative to @a target’s coordinate system. * * In order to perform this operation, both widgets must share a * common ancestor. * * @newin{4,12} * * @param target The `Gtk::Widget` to transform into. * @param point A point in the widget's coordinate system. * @return A std::optional, containing a value if the * point could be determined. */ std::optional compute_point( const Widget& target, const Gdk::Graphene::Point& point) const; /** Returns the content width of the widget. * * This function returns the width passed to its * size-allocate implementation, which is the width you * should be using in snapshot_vfunc(). * * For pointer events, see contains(). * * To learn more about widget sizes, see the coordinate * system [overview](coordinates.html). * * @return The width of @a widget. */ int get_width() const; /** Returns the content height of the widget. * * This function returns the height passed to its * size-allocate implementation, which is the height you * should be using in snapshot_vfunc(). * * For pointer events, see contains(). * * To learn more about widget sizes, see the coordinate * system [overview](coordinates.html). * * @return The height of @a widget. */ int get_height() const; /** Returns the baseline that has currently been allocated to @a widget. * * This function is intended to be used when implementing handlers * for the `Gtk::Widget`Class.snapshot() function, and when allocating * child widgets in `Gtk::Widget`Class.size_allocate(). * * @newin{4,12} * * @return The baseline of the @a widget, or -1 if none. */ int get_baseline() const; /** Returns the content width or height of the widget. * * Which dimension is returned depends on @a orientation. * * This is equivalent to calling get_width() * for Gtk::Orientation::HORIZONTAL or get_height() * for Gtk::Orientation::VERTICAL, but can be used when * writing orientation-independent code, such as when * implementing Gtk::Orientable widgets. * * To learn more about widget sizes, see the coordinate * system [overview](coordinates.html). * * @param orientation The orientation to query. * @return The size of @a widget in @a orientation. */ int get_size(Orientation orientation) const; /** Returns the parent widget of @a widget. * * @return The parent widget of @a widget. */ Widget* get_parent(); /** Returns the parent widget of @a widget. * * @return The parent widget of @a widget. */ const Widget* get_parent() const; /** Returns the `Gtk::Root` widget of @a widget. * * This function will return nullptr if the widget is not contained * inside a widget tree with a root widget. * * `Gtk::Root` widgets will return themselves here. * * @return The root widget of @a widget. */ Root* get_root(); /** Returns the `Gtk::Root` widget of @a widget. * * This function will return nullptr if the widget is not contained * inside a widget tree with a root widget. * * `Gtk::Root` widgets will return themselves here. * * @return The root widget of @a widget. */ const Root* get_root() const; /** Returns the nearest `Gtk::Native` ancestor of @a widget. * * This function will return nullptr if the widget is not * contained inside a widget tree with a native ancestor. * * `Gtk::Native` widgets will return themselves here. * * @return The `Gtk::Native` ancestor of @a widget. */ Native* get_native(); /** Returns the nearest `Gtk::Native` ancestor of @a widget. * * This function will return nullptr if the widget is not * contained inside a widget tree with a native ancestor. * * `Gtk::Native` widgets will return themselves here. * * @return The `Gtk::Native` ancestor of @a widget. */ const Native* get_native() const; /** Called by widgets as the user moves around the window using * keyboard shortcuts. * * The @a direction argument indicates what kind of motion is taking place (up, * down, left, right, tab forward, tab backward). * * This function calls the focus_vfunc() virtual function; widgets * can override the virtual function in order to implement appropriate focus * behavior. * * The default `focus()` virtual function for a widget should return true if * moving in @a direction left the focus on a focusable location inside that * widget, and false if moving in @a direction moved the focus outside the * widget. When returning true, widgets normally call grab_focus() * to place the focus accordingly; when returning false, they don’t modify * the current focus location. * * This function is used by custom widget implementations; if you're * writing an app, you’d use grab_focus() to move * the focus to a particular widget. * * @param direction Direction of focus movement. * @return true if focus ended up inside @a widget. */ bool child_focus(DirectionType direction); /** Emits the `::keynav-failed` signal on the widget. * * This function should be called whenever keyboard navigation * within a single widget hits a boundary. * * The return value of this function should be interpreted * in a way similar to the return value of * child_focus(). When true is returned, * stay in the widget, the failed keyboard navigation is OK * and/or there is nowhere we can/should move the focus to. * When false is returned, the caller should continue with * keyboard navigation outside the widget, e.g. by calling * child_focus() on the widget’s toplevel. * * The default signal_keynav_failed() handler returns * false for Gtk::DirectionType::TAB_FORWARD and Gtk::DirectionType::TAB_BACKWARD. * For the other values of `Gtk::DirectionType` it returns true. * * Whenever the default handler returns true, it also calls * error_bell() to notify the user of the * failed keyboard navigation. * * A use case for providing an own implementation of signal_keynav_failed() * (either by connecting to it or by overriding it) would be a row of * Gtk::Entry widgets where the user should be able to navigate * the entire row with the cursor keys, as e.g. known from user * interfaces that require entering license keys. * * @param direction Direction of focus movement. * @return true if stopping keyboard navigation is fine, false * if the emitting widget should try to handle the keyboard * navigation attempt in its parent container(s). */ bool keynav_failed(DirectionType direction); /** Notifies the user about an input-related error on this widget. * If the Gtk::Settings gtk-error-bell property is true, it calls * Gdk::Surface::beep(), otherwise it does nothing. * * Note that the effect of Gdk::Surface::beep() can be configured in many * ways, depending on the windowing backend and the desktop environment * or window manager that is used. * * @newin{2,12} */ void error_bell(); /** Sets the minimum size of a widget. * * That is, the widget’s size request will be at least @a width * by @a height. You can use this function to force a widget to * be larger than it normally would be. * * In most cases, Gtk::Window::set_default_size() is a better * choice for toplevel windows than this function; setting the default * size will still allow users to shrink the window. Setting the size * request will force them to leave the window at least as large as * the size request. * * Note the inherent danger of setting any fixed size - themes, * translations into other languages, different fonts, and user action * can all change the appropriate size for a given widget. So, it's * basically impossible to hardcode a size that will always be * correct. * * The size request of a widget is the smallest size a widget can * accept while still functioning well and drawing itself correctly. * However in some strange cases a widget may be allocated less than * its requested size, and in many cases a widget may be allocated more * space than it requested. * * If the size request in a given direction is -1 (unset), then * the “natural” size request of the widget will be used instead. * * The size request set here does not include any margin from the * properties * property_margin_start(), * property_margin_end(), * property_margin_top(), and * property_margin_bottom(), but it does include pretty * much all other padding or border properties set by any subclass * of `Gtk::Widget`. * * @param width Width @a widget should request, or -1 to unset. * @param height Height @a widget should request, or -1 to unset. */ void set_size_request(int width = -1, int height = -1); /** Gets the size request that was explicitly set for the widget using * set_size_request(). * * A value of -1 stored in @a width or @a height indicates that that * dimension has not been set explicitly and the natural requisition * of the widget will be used instead. See * set_size_request(). To get the size a widget will * actually request, call measure() instead of * this function. * * @param width Return location for width. * @param height Return location for height. */ void get_size_request(int& width, int& height) const; /** Like the other overload of get_size_request() but returns a structure holding the sizes instead of using output parameters. * @newin{4,14} */ [[nodiscard]] Requisition get_size_request() const; /** Request the @a widget to be rendered partially transparent. * * An opacity of 0 is fully transparent and an opacity of 1 * is fully opaque. * * Opacity works on both toplevel widgets and child widgets, although * there are some limitations: For toplevel widgets, applying opacity * depends on the capabilities of the windowing system. On X11, this * has any effect only on X displays with a compositing manager, * see gdk_display_is_composited(). On Windows and Wayland it should * always work, although setting a window’s opacity after the window * has been shown may cause some flicker. * * Note that the opacity is inherited through inclusion — if you set * a toplevel to be partially translucent, all of its content will * appear translucent, since it is ultimatively rendered on that * toplevel. The opacity value itself is not inherited by child * widgets (since that would make widgets deeper in the hierarchy * progressively more translucent). As a consequence, Gtk::Popovers * and other Gtk::Native widgets with their own surface will use their * own opacity value, and thus by default appear non-translucent, * even if they are attached to a toplevel that is translucent. * * @param opacity Desired opacity, between 0 and 1. */ void set_opacity(double opacity); /** #Fetches the requested opacity for this widget. * * See set_opacity(). * * @return The requested opacity for this widget. */ double get_opacity() const; /** Sets how @a widget treats content that is drawn outside the * widget's content area. * * See the definition of Gtk::Overflow for details. * * This setting is provided for widget implementations and * should not be used by application code. * * The default value is Gtk::Overflow::VISIBLE. * * @newin{3,96} * * @param overflow Desired overflow. */ void set_overflow(Overflow overflow); /** Returns the widget’s overflow value. * * @newin{3,96} * * @return The widget's overflow. */ Overflow get_overflow() const; /** Gets the first ancestor of @a widget with type @a widget_type. * * For example, `gtk_widget_get_ancestor (widget, GTK_TYPE_BOX)` * gets the first `Gtk::Box` that’s an ancestor of @a widget. No * reference will be added to the returned widget; it should * not be unreferenced. * * Note that unlike is_ancestor(), this function * considers @a widget to be an ancestor of itself. * * @param widget_type Ancestor type. * @return The ancestor widget. */ Widget* get_ancestor(GType widget_type); /** Gets the first ancestor of @a widget with type @a widget_type. * * For example, `gtk_widget_get_ancestor (widget, GTK_TYPE_BOX)` * gets the first `Gtk::Box` that’s an ancestor of @a widget. No * reference will be added to the returned widget; it should * not be unreferenced. * * Note that unlike is_ancestor(), this function * considers @a widget to be an ancestor of itself. * * @param widget_type Ancestor type. * @return The ancestor widget. */ const Widget* get_ancestor(GType widget_type) const; /** Retrieves the internal scale factor that maps from window * coordinates to the actual device pixels. * * On traditional systems this is 1, on high density outputs, * it can be a higher value (typically 2). * * See Gdk::Surface::get_scale_factor(). * * @return The scale factor for @a widget. */ int get_scale_factor() const; /** Get the `Gdk::Display` for the toplevel window associated with * this widget. * * This function can only be called after the widget has been * added to a widget hierarchy with a `Gtk::Window` at the top. * * In general, you should only create display specific * resources when a widget has been realized, and you should * free those resources when the widget is unrealized. * * @return The `Gdk::Display` for the toplevel * for this widget. */ Glib::RefPtr get_display(); /** Get the `Gdk::Display` for the toplevel window associated with * this widget. * * This function can only be called after the widget has been * added to a widget hierarchy with a `Gtk::Window` at the top. * * In general, you should only create display specific * resources when a widget has been realized, and you should * free those resources when the widget is unrealized. * * @return The `Gdk::Display` for the toplevel * for this widget. */ Glib::RefPtr get_display() const; /** Gets the settings object holding the settings used for this widget. * * Note that this function can only be called when the `Gtk::Widget` * is attached to a toplevel, since the settings object is specific * to a particular `Gdk::Display`. If you want to monitor the widget for * changes in its settings, connect to the `notify::display` signal. * * @return The relevant `Gtk::Settings` object. */ Glib::RefPtr get_settings(); /** Gets the clipboard object for @a widget. * * This is a utility function to get the clipboard object for the * `Gdk::Display` that @a widget is using. * * Note that this function always works, even when @a widget is not * realized yet. * * @return The appropriate clipboard object. */ Glib::RefPtr get_clipboard(); /** Gets the clipboard object for @a widget. * * This is a utility function to get the clipboard object for the * `Gdk::Display` that @a widget is using. * * Note that this function always works, even when @a widget is not * realized yet. * * @return The appropriate clipboard object. */ Glib::RefPtr get_clipboard() const; /** Gets the primary clipboard of @a widget. * * This is a utility function to get the primary clipboard object * for the `Gdk::Display` that @a widget is using. * * Note that this function always works, even when @a widget is not * realized yet. * * @return The appropriate clipboard object. */ Glib::RefPtr get_primary_clipboard(); /** Gets the primary clipboard of @a widget. * * This is a utility function to get the primary clipboard object * for the `Gdk::Display` that @a widget is using. * * Note that this function always works, even when @a widget is not * realized yet. * * @return The appropriate clipboard object. */ Glib::RefPtr get_primary_clipboard() const; /** Gets whether the widget would like any available extra horizontal * space. * * When a user resizes a `Gtk::Window`, widgets with expand=true * generally receive the extra space. For example, a list or * scrollable area or document in your window would often be set to * expand. * * Containers should use compute_expand() rather * than this function, to see whether a widget, or any of its children, * has the expand flag set. If any child of a widget wants to * expand, the parent may ask to expand also. * * This function only looks at the widget’s own hexpand flag, rather * than computing whether the entire widget tree rooted at this widget * wants to expand. * * @return Whether hexpand flag is set. */ bool get_hexpand() const; /** Sets whether the widget would like any available extra horizontal * space. * * When a user resizes a `Gtk::Window`, widgets with expand=true * generally receive the extra space. For example, a list or * scrollable area or document in your window would often be set to * expand. * * Call this function to set the expand flag if you would like your * widget to become larger horizontally when the window has extra * room. * * By default, widgets automatically expand if any of their children * want to expand. (To see if a widget will automatically expand given * its current children and state, call compute_expand(). * A container can decide how the expandability of children affects the * expansion of the container by overriding the compute_expand virtual * method on `Gtk::Widget`.). * * Setting hexpand explicitly with this function will override the * automatic expand behavior. * * This function forces the widget to expand or not to expand, * regardless of children. The override occurs because * set_hexpand() sets the hexpand-set property (see * set_hexpand_set()) which causes the widget’s hexpand * value to be used, rather than looking at children and widget state. * * @param expand Whether to expand. */ void set_hexpand(bool expand = true); /** Gets whether set_hexpand() has been used * to explicitly set the expand flag on this widget. * * If property_hexpand() property is set, then it * overrides any computed expand value based on child widgets. * If `hexpand` is not set, then the expand value depends on * whether any children of the widget would like to expand. * * There are few reasons to use this function, but it’s here * for completeness and consistency. * * @return Whether hexpand has been explicitly set. */ bool get_hexpand_set() const; /** Sets whether the hexpand flag will be used. * * The property_hexpand_set() property will be set * automatically when you call set_hexpand() * to set hexpand, so the most likely reason to use this function * would be to unset an explicit expand flag. * * If hexpand is set, then it overrides any computed * expand value based on child widgets. If hexpand is not * set, then the expand value depends on whether any * children of the widget would like to expand. * * There are few reasons to use this function, but it’s here * for completeness and consistency. * * @param set Value for hexpand-set property. */ void set_hexpand_set(bool set = true); /** Gets whether the widget would like any available extra vertical * space. * * See get_hexpand() for more detail. * * @return Whether vexpand flag is set. */ bool get_vexpand() const; /** Sets whether the widget would like any available extra vertical * space. * * See set_hexpand() for more detail. * * @param expand Whether to expand. */ void set_vexpand(bool expand = true); /** Gets whether set_vexpand() has been used to * explicitly set the expand flag on this widget. * * See get_hexpand_set() for more detail. * * @return Whether vexpand has been explicitly set. */ bool get_vexpand_set() const; /** Sets whether the vexpand flag will be used. * * See set_hexpand_set() for more detail. * * @param set Value for vexpand-set property. */ void set_vexpand_set(bool set = true); /** Computes whether a container should give this widget * extra space when possible. * * Containers should check this, rather than looking at * get_hexpand() or get_vexpand(). * * This function already checks whether the widget is visible, so * visibility does not need to be checked separately. Non-visible * widgets are not expanded. * * The computed expand value uses either the expand setting explicitly * set on the widget itself, or, if none has been explicitly set, * the widget may expand if some of its children do. * * @param orientation Expand direction. * @return Whether widget tree rooted here should be expanded. */ bool compute_expand(Orientation orientation); /** Sets whether the widget would like any available extra space in both directions. * * @see set_hexpand() for more detail. * @param expand Whether to expand in horizontal and vertical direction. */ void set_expand(bool expand = true); /** Gets the horizontal alignment of @a widget. * * For backwards compatibility reasons this method will never return * one of the baseline alignments, but instead it will convert it to * `Gtk::Align::FILL` or `Gtk::Align::CENTER`. * * Baselines are not supported for horizontal alignment. * * @return The horizontal alignment of @a widget. */ Align get_halign() const; /** Sets the horizontal alignment of @a widget. * * @param align The horizontal alignment. */ void set_halign(Align align); /** Gets the vertical alignment of @a widget. * * @return The vertical alignment of @a widget. */ Align get_valign() const; /** Sets the vertical alignment of @a widget. * * @param align The vertical alignment. */ void set_valign(Align align); /** Gets the start margin of @a widget. * * @return The start margin of @a widget. */ int get_margin_start() const; /** Sets the start margin of @a widget. * * @param margin The start margin. */ void set_margin_start(int margin); /** Gets the end margin of @a widget. * * @return The end margin of @a widget. */ int get_margin_end() const; /** Sets the end margin of @a widget. * * @param margin The end margin. */ void set_margin_end(int margin); /** Gets the top margin of @a widget. * * @return The top margin of @a widget. */ int get_margin_top() const; /** Sets the top margin of @a widget. * * @param margin The top margin. */ void set_margin_top(int margin); /** Gets the bottom margin of @a widget. * * @return The bottom margin of @a widget. */ int get_margin_bottom() const; /** Sets the bottom margin of @a widget. * * @param margin The bottom margin. */ void set_margin_bottom(int margin); /** Set all 4 margins to the same value. * @param margin The start, end, top, and bottom margin. */ void set_margin(int margin); /** Determines whether @a widget is somewhere inside @a ancestor, * possibly with intermediate containers. * * @param ancestor Another `Gtk::Widget`. * @return true if @a ancestor contains @a widget as a child, * grandchild, great grandchild, etc. */ bool is_ancestor(Widget & ancestor) const; #ifndef GTKMM_DISABLE_DEPRECATED /** Translate coordinates relative to @a src_widget’s allocation * to coordinates relative to @a dest_widget’s allocations. * * In order to perform this operation, both widget must share * a common ancestor. * * Deprecated: 4.12: Use compute_point() instead * * @deprecated Use compute_point() instead * * @param dest_widget A `Gtk::Widget`. * @param src_x X position relative to @a src_widget. * @param src_y Y position relative to @a src_widget. * @param dest_x Location to store X position relative to @a dest_widget. * @param dest_y Location to store Y position relative to @a dest_widget. * @return false if @a src_widget and @a dest_widget have no common * ancestor. In this case, 0 is stored in * @a dest_x and * @a dest_y. * Otherwise true. */ bool translate_coordinates(Widget& dest_widget, double src_x, double src_y, double& dest_x, double& dest_y); #endif // GTKMM_DISABLE_DEPRECATED /** Tests if the point at ( @a x, @a y) is contained in @a widget. * * The coordinates for ( @a x, @a y) must be in widget coordinates, so * (0, 0) is assumed to be the top left of @a widget's content area. * * @param x X coordinate to test, relative to @a widget's origin. * @param y Y coordinate to test, relative to @a widget's origin. * @return true if @a widget contains ( @a x, @a y). */ bool contains(double x, double y) const; /** Finds the descendant of @a widget closest to the point ( @a x, @a y). * * The point must be given in widget coordinates, so (0, 0) is assumed * to be the top left of @a widget's content area. * * Usually widgets will return nullptr if the given coordinate is not * contained in @a widget checked via contains(). * Otherwise they will recursively try to find a child that does * not return nullptr. Widgets are however free to customize their * picking algorithm. * * This function is used on the toplevel to determine the widget * below the mouse cursor for purposes of hover highlighting and * delivering events. * * @param x X coordinate to test, relative to @a widget's origin. * @param y Y coordinate to test, relative to @a widget's origin. * @param flags Flags to influence what is picked. * @return The widget descendant at * the given point. */ Widget* pick(double x, double y, PickFlags flags = PickFlags::DEFAULT); /** Finds the descendant of @a widget closest to the point ( @a x, @a y). * * The point must be given in widget coordinates, so (0, 0) is assumed * to be the top left of @a widget's content area. * * Usually widgets will return nullptr if the given coordinate is not * contained in @a widget checked via contains(). * Otherwise they will recursively try to find a child that does * not return nullptr. Widgets are however free to customize their * picking algorithm. * * This function is used on the toplevel to determine the widget * below the mouse cursor for purposes of hover highlighting and * delivering events. * * @param x X coordinate to test, relative to @a widget's origin. * @param y Y coordinate to test, relative to @a widget's origin. * @param flags Flags to influence what is picked. * @return The widget descendant at * the given point. */ const Widget* pick(double x, double y, PickFlags flags = PickFlags::DEFAULT) const; /** Adds @a controller to @a widget so that it will receive events. * * You will usually want to call this function right after * creating any kind of Gtk::EventController. * * @param controller A `Gtk::EventController` that hasn't been * added to a widget yet. */ void add_controller(const Glib::RefPtr& controller); /** Removes @a controller from @a widget, so that it doesn't process * events anymore. * * It should not be used again. * * Widgets will remove all event controllers automatically when they * are destroyed, there is normally no need to call this function. * * @param controller A `Gtk::EventController`. */ void remove_controller(const Glib::RefPtr& controller); /** Creates a new `Pango::Context` with the appropriate font map, * font options, font description, and base direction for drawing * text for this widget. * * See also get_pango_context(). * * @return The new `Pango::Context`. */ Glib::RefPtr create_pango_context(); /** Gets a `Pango::Context` with the appropriate font map, font description, * and base direction for this widget. * * Unlike the context returned by create_pango_context(), * this context is owned by the widget (it can be used until the screen * for the widget changes or the widget is removed from its toplevel), * and will be updated to match any changes to the widget’s attributes. * This can be tracked by listening to changes of the * property_root() property on the widget. * * @return The `Pango::Context` for the widget. */ Glib::RefPtr get_pango_context(); #ifndef GTKMM_DISABLE_DEPRECATED /** Sets the `cairo_font_options_t` used for Pango rendering * in this widget. * * When not set, the default font options for the `Gdk::Display` * will be used. * * Deprecated: 4.16 * * @deprecated There is no replacement. * * @param options A `cairo_font_options_t` * to unset any previously set default font options. */ void set_font_options(const Cairo::FontOptions& options); #endif // GTKMM_DISABLE_DEPRECATED #ifndef GTKMM_DISABLE_DEPRECATED /** Undoes the effect of previous calls to set_font_options(). * * @newin{3,20} * @deprecated 4.16: There is no replacement. */ void unset_font_options(); #endif // GTKMM_DISABLE_DEPRECATED // This returns a const, so we assume that we must copy it: #ifndef GTKMM_DISABLE_DEPRECATED /** Returns the `cairo_font_options_t` of widget. * * Seee set_font_options(). * * Deprecated: 4.16 * * @deprecated There is no replacement. * * @return The `cairo_font_options_t` of widget. */ Cairo::FontOptions get_font_options() const; #endif // GTKMM_DISABLE_DEPRECATED /** Creates a new `Pango::Layout` with the appropriate font map, * font description, and base direction for drawing text for * this widget. * * If you keep a `Pango::Layout` created in this way around, * you need to re-create it when the widget `Pango::Context` * is replaced. This can be tracked by listening to changes * of the property_root() property on the widget. * * @param text Text to set on the layout. * @return The new `Pango::Layout`. */ Glib::RefPtr create_pango_layout(const Glib::ustring& text); /* Directionality of Text */ /** Sets the reading direction on a particular widget. * * This direction controls the primary direction for widgets * containing text, and also the direction in which the children * of a container are packed. The ability to set the direction is * present in order so that correct localization into languages with * right-to-left reading directions can be done. Generally, applications * will let the default reading direction present, except for containers * where the containers are arranged in an order that is explicitly * visual rather than logical (such as buttons for text justification). * * If the direction is set to Gtk::TextDirection::NONE, then the value * set by set_default_direction() will be used. * * @param dir The new direction. */ void set_direction(TextDirection dir); /** Gets the reading direction for a particular widget. * * See set_direction(). * * @return The reading direction for the widget. */ TextDirection get_direction() const; /** Sets the default reading direction for widgets. * * See set_direction(). * * @param dir The new default direction. This cannot be Gtk::TextDirection::NONE. */ static void set_default_direction(TextDirection dir); /** Obtains the current default reading direction. * * See set_default_direction(). * * @return The current default direction. */ static TextDirection get_default_direction(); /** Sets the cursor to be shown when pointer devices point * towards @a widget. * * If the @a cursor is nullptr, @a widget will use the cursor * inherited from the parent widget. * * @param cursor The new cursor. */ void set_cursor(const Glib::RefPtr& cursor); /** Sets a named cursor to be shown when pointer devices point towards the widget. * * This is a utility function that creates a cursor and then sets it on the widget. * * If the @a name is an empty string, the widget will use the cursor specified via CSS * or the parent widget. If neither specifies a cursor, the default cursor * will be shown. This is the default behavior. * * @newin{3,94} * * @param name The name of the cursor, or an empty string to use the default cursor. */ void set_cursor(const Glib::ustring& name = {}); /** Queries the cursor set on @a widget. * * See set_cursor() for details. * * @return The cursor * currently in use or nullptr if the cursor is inherited. */ Glib::RefPtr get_cursor(); /** Queries the cursor set on @a widget. * * See set_cursor() for details. * * @return The cursor * currently in use or nullptr if the cursor is inherited. */ Glib::RefPtr get_cursor() const; /** Returns the widgets for which this widget is the target of a * mnemonic. * * Typically, these widgets will be labels. See, for example, * Gtk::Label::set_mnemonic_widget(). * * The widgets in the list are not individually referenced. * If you want to iterate through the list and perform actions * involving callbacks that might destroy the widgets, you * must call `g_list_foreach (result, (GFunc)g_object_ref, nullptr)` * first, and then unref all the widgets afterwards. * * @return The list * of mnemonic labels; free this list with Glib::list_free() when you * are done with it. */ std::vector list_mnemonic_labels(); /** Returns the widgets for which this widget is the target of a * mnemonic. * * Typically, these widgets will be labels. See, for example, * Gtk::Label::set_mnemonic_widget(). * * The widgets in the list are not individually referenced. * If you want to iterate through the list and perform actions * involving callbacks that might destroy the widgets, you * must call `g_list_foreach (result, (GFunc)g_object_ref, nullptr)` * first, and then unref all the widgets afterwards. * * @return The list * of mnemonic labels; free this list with Glib::list_free() when you * are done with it. */ std::vector list_mnemonic_labels() const; /** Adds a widget to the list of mnemonic labels for * this widget. (See list_mnemonic_labels()). Note the * list of mnemonic labels for the widget is cleared when the * widget is destroyed, so the caller must make sure to update * its internal state at this point as well. * * @newin{2,4} * * @param label A `Gtk::Widget` that acts as a mnemonic label for @a widget. */ void add_mnemonic_label(Widget& label); /** Removes a widget from the list of mnemonic labels for this widget. * * See list_mnemonic_labels(). The widget must * have previously been added to the list with * add_mnemonic_label(). * * @param label A `Gtk::Widget` that was previously set as a mnemonic * label for @a widget with add_mnemonic_label(). */ void remove_mnemonic_label(Widget& label); /** Checks to see if a drag movement has passed the GTK drag threshold. * * @param start_x X coordinate of start of drag. * @param start_y Y coordinate of start of drag. * @param current_x Current X coordinate. * @param current_y Current Y coordinate. * @return true if the drag threshold has been passed. */ bool drag_check_threshold(int start_x, int start_y, int current_x, int current_y); /** Obtains the frame clock for a widget. * * The frame clock is a global “ticker” that can be used to drive * animations and repaints. The most common reason to get the frame * clock is to call Gdk::FrameClock::get_frame_time(), in order * to get a time to use for animating. For example you might record * the start of the animation with an initial value from * Gdk::FrameClock::get_frame_time(), and then update the animation * by calling Gdk::FrameClock::get_frame_time() again during each repaint. * * Gdk::FrameClock::request_phase() will result in a new frame on the * clock, but won’t necessarily repaint any widgets. To repaint a * widget, you have to use queue_draw() which invalidates * the widget (thus scheduling it to receive a draw on the next * frame). queue_draw() will also end up requesting a frame * on the appropriate frame clock. * * A widget’s frame clock will not change while the widget is * mapped. Reparenting a widget (which implies a temporary unmap) can * change the widget’s frame clock. * * Unrealized widgets do not have a frame clock. * * @newin{3,24} * * @return A `Gdk::FrameClock`. */ Glib::RefPtr get_frame_clock(); /** Obtains the frame clock for a widget. * * The frame clock is a global “ticker” that can be used to drive * animations and repaints. The most common reason to get the frame * clock is to call Gdk::FrameClock::get_frame_time(), in order * to get a time to use for animating. For example you might record * the start of the animation with an initial value from * Gdk::FrameClock::get_frame_time(), and then update the animation * by calling Gdk::FrameClock::get_frame_time() again during each repaint. * * Gdk::FrameClock::request_phase() will result in a new frame on the * clock, but won’t necessarily repaint any widgets. To repaint a * widget, you have to use queue_draw() which invalidates * the widget (thus scheduling it to receive a draw on the next * frame). queue_draw() will also end up requesting a frame * on the appropriate frame clock. * * A widget’s frame clock will not change while the widget is * mapped. Reparenting a widget (which implies a temporary unmap) can * change the widget’s frame clock. * * Unrealized widgets do not have a frame clock. * * @newin{3,24} * * @return A `Gdk::FrameClock`. */ Glib::RefPtr get_frame_clock() const; //Used when implementing containers: /** Sets @a parent as the parent widget of @a widget. * * This takes care of details such as updating the state and style * of the child to reflect its new location and resizing the parent. * The opposite function is unparent(). * * This function is useful only when implementing subclasses of * `Gtk::Widget`. * * @param parent Parent widget. */ void set_parent(Widget& parent); /** Dissociate @a widget from its parent. * * This function is only for use in widget implementations, * typically in dispose. */ void unparent(); //TODO: When exactly do we need to custom containers need to call map() on the child widgets? //Most containers that derive from GtkContainer do not need to, but GtkNotebook does. /** Causes a widget to be mapped if it isn’t already. * * This function is only for use in widget implementations. */ void map(); /** Causes a widget to be unmapped if it’s currently mapped. * * This function is only for use in widget implementations. */ void unmap(); // Gtk+ 2.12 tooltip API /** Triggers a tooltip query on the display where the toplevel * of @a widget is located. */ void trigger_tooltip_query(); /** Sets @a text as the contents of the tooltip. * * If @a text contains any markup, it will be escaped. * * This function will take care of setting * property_has_tooltip() as a side effect, * and of the default handler for the * signal_query_tooltip() signal. * * See also Gtk::Tooltip::set_text(). * * @param text The contents of the tooltip for @a widget. */ void set_tooltip_text(const Glib::ustring& text); /** Gets the contents of the tooltip for @a widget. * * If the @a widget's tooltip was set using * set_tooltip_markup(), * this function will return the escaped text. * * @return The tooltip text. */ Glib::ustring get_tooltip_text() const; /** Sets @a markup as the contents of the tooltip, which is marked up with * the Pango text markup language. * * This function will take care of setting GtkWidget:has-tooltip to true * and of the default handler for the GtkWidget::query-tooltip signal. * * See also the GtkWidget:tooltip-markup property and * Gtk::Tooltip::set_markup(). * * @newin{2,12} * * @param markup The contents of the tooltip for @a widget. */ void set_tooltip_markup(const Glib::ustring& markup); /** Gets the contents of the tooltip for @a widget. * * If the tooltip has not been set using * set_tooltip_markup(), this * function returns nullptr. * * @return The tooltip text. */ Glib::ustring get_tooltip_markup() const; /** Sets the `has-tooltip` property on @a widget to @a has_tooltip. * * @param has_tooltip Whether or not @a widget has a tooltip. */ void set_has_tooltip(bool has_tooltip = TRUE); /** Returns the current value of the `has-tooltip` property. * * @return Current value of `has-tooltip` on @a widget. */ bool get_has_tooltip() const; /** Returns whether the widget is currently being destroyed. * * This information can sometimes be used to avoid doing * unnecessary work. * * @return true if @a widget is being destroyed. */ bool in_destruction() const; #ifndef GTKMM_DISABLE_DEPRECATED /** Returns the style context associated to @a widget. * * The returned object is guaranteed to be the same * for the lifetime of @a widget. * * Deprecated: 4.10: Style contexts will be removed in GTK 5 * * @deprecated Style contexts will be removed in GTK 5. * * @return The widget’s `Gtk::StyleContext`. */ Glib::RefPtr get_style_context(); #endif // GTKMM_DISABLE_DEPRECATED #ifndef GTKMM_DISABLE_DEPRECATED /** Returns the style context associated to @a widget. * * The returned object is guaranteed to be the same * for the lifetime of @a widget. * * Deprecated: 4.10: Style contexts will be removed in GTK 5 * * @deprecated Style contexts will be removed in GTK 5. * * @return The widget’s `Gtk::StyleContext`. */ Glib::RefPtr get_style_context() const; #endif // GTKMM_DISABLE_DEPRECATED /** Callback type for adding a function to update animations. See add_tick_callback(). * * For instance: * @code * bool on_tick(const Glib::RefPtr& frame_clock); * @endcode * * @param frame_clock The frame clock for the widget (same as calling get_frame_clock()). * @return true if the tick callback should continue to be called, * false if the tick callback should be removed. * * @newin{3,24} */ using SlotTick = sigc::slot&)>; /** Queues an animation frame update and adds a callback to be called * before each frame. * * Until the tick callback is removed, it will be * called frequently (usually at the frame rate of the output device * or as quickly as the application can be repainted, whichever is * slower). For this reason, is most suitable for handling graphics * that change every frame or every few frames. The tick callback does * not automatically imply a relayout or repaint. If you want a * repaint or relayout, and aren’t changing widget properties that * would trigger that (for example, changing the text of a Gtk::Label), * then you will have to call queue_resize() or queue_draw_area() yourself. * * Gdk::FrameClock::get_frame_time() should generally be used for timing * continuous animations and * Gdk::FrameTimings::get_predicted_presentation_time() if you are * trying to display isolated frames at particular times. * * This is a more convenient alternative to connecting directly to the * Gdk::FrameClock::signal_update() signal of Gdk::FrameClock, since you don't * have to worry about when a Gdk::FrameClock is assigned to a widget. * * @newin{3,24} * * @param slot Slot to call for updating animations. * @return An id for the connection of this callback. Remove the callback * by passing it to remove_tick_callback(). */ guint add_tick_callback(const SlotTick& slot); /** Removes a tick callback previously registered with * add_tick_callback(). * * @newin{3,24} * * @param id An id returned by add_tick_callback(). */ void remove_tick_callback(guint id); //This is mostly only needed by the class itself, so it could be protected, //but it is sometimes helpful to call it from outside: /** Inserts @a group into @a widget. * * Children of @a widget that implement Gtk::Actionable can * then be associated with actions in @a group by setting their * “action-name” to @a prefix.`action-name`. * * Note that inheritance is defined for individual actions. I.e. * even if you insert a group with prefix @a prefix, actions with * the same prefix will still be inherited from the parent, unless * the group contains an action with the same name. * * If @a group is nullptr, a previously inserted group for @a name is * removed from @a widget. * * @param name The prefix for actions in @a group. * @param group A `Gio::ActionGroup`, or nullptr to remove * the previously inserted group for @a name. */ void insert_action_group(const Glib::ustring& name, const Glib::RefPtr& group); /** Removes a group from the widget. * See insert_action_group(). * * @param name The prefix for actions. * * @newin{3,10} */ void remove_action_group(const Glib::ustring& name); /** Looks up the action in the action groups associated * with the widget and its ancestors, and activates it. * * If the action is in an action group added with * insert_action_group(), the @a name is * expected to be prefixed with the prefix that was * used when the group was inserted. * * The arguments must match the action's expected parameter * type, as returned by Gio::Action::get_parameter_type(). * * @param name The name of the action to activate. * @param args Parameters to use, or an empty (invalid) Glib::VariantBase * if the action does not expect parameters. * @return true if the action was activated, false if the * action does not exist. */ bool activate_action(const Glib::ustring& name, const Glib::VariantBase& args = {}); /** Activates the `default.activate` action from @a widget. */ void activate_default(); /** Sets the font map to use for Pango rendering. * * The font map is the object that is used to look up fonts. * Setting a custom font map can be useful in special situations, * e.g. when you need to add application-specific fonts to the set * of available fonts. * * When not set, the widget will inherit the font map from its parent. * * @param font_map A `Pango::FontMap`, or nullptr to unset any * previously set font map. */ void set_font_map(const Glib::RefPtr& font_map); /** Gets the font map of @a widget. * * See set_font_map(). * * @return A `Pango::FontMap`. */ Glib::RefPtr get_font_map(); /** Gets the font map of @a widget. * * See set_font_map(). * * @return A `Pango::FontMap`. */ Glib::RefPtr get_font_map() const; /** Returns the widget’s first child. * * This API is primarily meant for widget implementations. * * @return The widget's first child. */ Widget* get_first_child(); /** Returns the widget’s first child. * * This API is primarily meant for widget implementations. * * @return The widget's first child. */ const Widget* get_first_child() const; /** Returns the widget’s last child. * * This API is primarily meant for widget implementations. * * @return The widget's last child. */ Widget* get_last_child(); /** Returns the widget’s last child. * * This API is primarily meant for widget implementations. * * @return The widget's last child. */ const Widget* get_last_child() const; /** Returns the widget’s next sibling. * * This API is primarily meant for widget implementations. * * @return The widget's next sibling. */ Widget* get_next_sibling(); /** Returns the widget’s next sibling. * * This API is primarily meant for widget implementations. * * @return The widget's next sibling. */ const Widget* get_next_sibling() const; /** Returns the widget’s previous sibling. * * This API is primarily meant for widget implementations. * * @return The widget's previous sibling. */ Widget* get_prev_sibling(); /** Returns the widget’s previous sibling. * * This API is primarily meant for widget implementations. * * @return The widget's previous sibling. */ const Widget* get_prev_sibling() const; /** Gets a vector of the widgetʼs current children, from first child to last. * Unlike observe_children(), this does not incur extra bookkeeping to track * children, update or emit signal when they change, etc. – so it is faster. * @return A new vector of current children, in order of first child to last. * @newin{4,14} */ [[nodiscard]] std::vector get_children(); /// @copydoc get_children() [[nodiscard]] std::vector get_children() const; /** Returns a `Gio::ListModel` to track the children of @a widget. * * Calling this function will enable extra internal bookkeeping * to track children and emit signals on the returned listmodel. * It may slow down operations a lot. * * Applications should try hard to avoid calling this function * because of the slowdowns. * * @return A `Gio::ListModel` tracking @a widget's children. */ Glib::RefPtr observe_children(); /** Returns a `Gio::ListModel` to track the children of @a widget. * * Calling this function will enable extra internal bookkeeping * to track children and emit signals on the returned listmodel. * It may slow down operations a lot. * * Applications should try hard to avoid calling this function * because of the slowdowns. * * @return A `Gio::ListModel` tracking @a widget's children. */ Glib::RefPtr observe_children() const; /** Returns a `Gio::ListModel` to track the Gtk::EventControllers * of @a widget. * * Calling this function will enable extra internal bookkeeping * to track controllers and emit signals on the returned listmodel. * It may slow down operations a lot. * * Applications should try hard to avoid calling this function * because of the slowdowns. * * @return A `Gio::ListModel` tracking @a widget's controllers. */ Glib::RefPtr observe_controllers(); /** Returns a `Gio::ListModel` to track the Gtk::EventControllers * of @a widget. * * Calling this function will enable extra internal bookkeeping * to track controllers and emit signals on the returned listmodel. * It may slow down operations a lot. * * Applications should try hard to avoid calling this function * because of the slowdowns. * * @return A `Gio::ListModel` tracking @a widget's controllers. */ Glib::RefPtr observe_controllers() const; /** Inserts the %Widget into the child widget list of @a parent after @a previous_sibling. * * After calling this function, get_prev_sibling() will return @a previous_sibling. * * If @a parent is already set as the parent widget of the %Widget, this function can also be used * to reorder the %Widget in the child widget list of @a parent. * * @param parent The parent Gtk::Widget to insert the %Widget into. * @param previous_sibling The new previous sibling of the %Widget. */ void insert_after(Widget& parent, const Widget& previous_sibling); /** Inserts the %Widget into the child widget list of @a parent before @a next_sibling. * * After calling this function, get_next_sibling() will return @a next_sibling. * * If @a parent is already set as the parent widget of the %Widget, this function can also be used * to reorder the %Widget in the child widget list of @a parent. * * @param parent The parent Gtk::Widget to insert the %Widget into. * @param next_sibling The new next sibling of the %Widget. */ void insert_before(Widget& parent, const Widget& next_sibling); /** Inserts the %Widget at the beginning of the child widget list of @a parent. * * After calling this function, get_prev_sibling() will return nullptr. * * If @a parent is already set as the parent of the %Widget, this function can also be used * to reorder the %Widget in the child widget list of @a parent. * * @param parent The parent Gtk::Widget to insert the %Widget into. */ void insert_at_start(Widget& parent); /** Inserts the %Widget at the end of the child widget list of @a parent. * * After calling this function, get_next_sibling() will return nullptr. * * If @a parent is already set as the parent of the %Widget, this function can also be used * to reorder the %Widget in the child widget list of @a parent. * * @param parent The parent Gtk::Widget to insert the %Widget into. */ void insert_at_end(Widget& parent); /** Snapshot the a child of @a widget. * * When a widget receives a call to the snapshot function, * it must send synthetic snapshot_vfunc() calls * to all children. This function provides a convenient way * of doing this. A widget, when it receives a call to its * snapshot_vfunc() function, calls * snapshot_child() once for each child, passing in * the @a snapshot the widget received. * * snapshot_child() takes care of translating the origin of * @a snapshot, and deciding whether the child needs to be snapshot. * * This function does nothing for children that implement `Gtk::Native`. * * @param child A child of @a widget. * @param snapshot `Gtk::Snapshot` as passed to the widget. In particular, no * calls to Gtk::Snapshot::translate() or other transform calls should * have been made. */ void snapshot_child(Widget& child, const Glib::RefPtr& snapshot); /** Returns whether @a widget should contribute to * the measuring and allocation of its parent. * * This is false for invisible children, but also * for children that have their own surface. * * @return true if child should be included in * measuring and allocating. */ bool should_layout() const; /** Returns the CSS name that is used for @a self. * * @return The CSS name. */ Glib::ustring get_css_name() const; /** Adds a style class to @a widget. * * After calling this function, the widget’s style will match * for @a css_class, according to CSS matching rules. * * Use remove_css_class() to remove the * style again. * * @param css_class The style class to add to @a widget, without * the leading '.' used for notation of style classes. */ void add_css_class(const Glib::ustring& css_class); /** Removes a style from @a widget. * * After this, the style of @a widget will stop matching for @a css_class. * * @param css_class The style class to remove from @a widget, without * the leading '.' used for notation of style classes. */ void remove_css_class(const Glib::ustring& css_class); /** Returns whether @a css_class is currently applied to @a widget. * * @param css_class A style class, without the leading '.' * used for notation of style classes. * @return true if @a css_class is currently applied to @a widget, * false otherwise. */ bool has_css_class(const Glib::ustring& css_class) const; /** Returns the list of style classes applied to @a widget. * * @return A nullptr-terminated list of * css classes currently applied to @a widget. */ std::vector get_css_classes() const; /** Clear all style classes applied to @a widget * and replace them with @a classes. * * @param classes nullptr-terminated list of style classes to apply to @a widget. */ void set_css_classes(const std::vector& classes); /** Gets the current foreground color for the widget's CSS style. * * This function should only be used in snapshot implementations * that need to do custom drawing with the foreground color. * * @newin{4,10} * * @return The widget's foreground color. */ Gdk::RGBA get_color() const; // signals /** * @par Slot Prototype: * void on_my_%show() * * Flags: Run First * * Emitted when @a widget is shown. */ Glib::SignalProxy signal_show(); /** * @par Slot Prototype: * void on_my_%hide() * * Flags: Run First * * Emitted when @a widget is hidden. */ Glib::SignalProxy signal_hide(); /// Emitted on mapping of a widget to the screen. //- See {flags.mapped}. /** * @par Slot Prototype: * void on_my_%map() * * Flags: Run First * * Emitted when @a widget is going to be mapped. * * A widget is mapped when the widget is visible (which is controlled with * property_visible()) and all its parents up to the toplevel widget * are also visible. * * The signal_map() signal can be used to determine whether a widget will be drawn, * for instance it can resume an animation that was stopped during the * emission of signal_unmap(). */ Glib::SignalProxy signal_map(); //- See {flags.mapped}. /** * @par Slot Prototype: * void on_my_%unmap() * * Flags: Run First * * Emitted when @a widget is going to be unmapped. * * A widget is unmapped when either it or any of its parents up to the * toplevel widget have been set as hidden. * * As signal_unmap() indicates that a widget will not be shown any longer, * it can be used to, for example, stop an animation on the widget. */ Glib::SignalProxy signal_unmap(); /// Emitted on realization of a widget. //- See {flags.realized}. This is also responsible for //- setting {flags.realized} when it is done. Therefore, //- when overriding the impl method, you should call the //- default realize method. /** * @par Slot Prototype: * void on_my_%realize() * * Flags: Run First * * Emitted when @a widget is associated with a `Gdk::Surface`. * * This means that Gtk::Widget::realize() has been called * or the widget has been mapped (that is, it is going to be drawn). */ Glib::SignalProxy signal_realize(); //- See {flags.realized}. This should not be called by the user. //__WRAP(meth|sig|impl,void unrealize_(),gtk_widget_unrealize,"unrealize") /** * @par Slot Prototype: * void on_my_%unrealize() * * Flags: Run Last * * Emitted when the `Gdk::Surface` associated with @a widget is destroyed. * * This means that Gtk::Widget::unrealize() has been called * or the widget has been unmapped (that is, it is going to be hidden). */ Glib::SignalProxy signal_unrealize(); /** * @par Slot Prototype: * void on_my_%state_flags_changed(Gtk::StateFlags previous_state_flags) * * Flags: Run First * * Emitted when the widget state changes. * * See Gtk::Widget::get_state_flags(). * * @param previous_state_flags The previous state flags. */ Glib::SignalProxy signal_state_flags_changed(); /** * @par Slot Prototype: * void on_my_%direction_changed(TextDirection direction) * * Flags: Run First * * Emitted when the text direction of a widget changes. * * @param direction The previous text direction of @a widget. */ Glib::SignalProxy signal_direction_changed(); /** * @par Slot Prototype: * bool on_my_%mnemonic_activate(bool group_cycling) * * Flags: Run Last * * Emitted when a widget is activated via a mnemonic. * * The default handler for this signal activates @a widget if @a group_cycling * is false, or just makes @a widget grab focus if @a group_cycling is true. * * @param group_cycling true if there are other widgets with the same mnemonic. * @return true to stop other handlers from being invoked for the event. * false to propagate the event further. */ Glib::SignalProxy signal_mnemonic_activate(); /** Emitted during the dispose phase. * * You need to connect to this signal only if you are implementing a widget, which * 1. is a direct descendant of %Gtk::Widget, * 2. contains other widgets (is a container widget), and * 3. shall work well as a managed object. * * The children of the object need to be unparented *both* from the handler * of this signal *and* from the destructor. Reason: when your class is used * as a managed object, then the C++ destructor is called too late, but when * your class is managed via the standard C++ manner, then this signal is not * emitted at all. * * When your class inherits from a container widget, such as Gtk::Box, you * do not need to handle this signal. When your widget does not have child * widgets, then you also do not need to handle this signal. * * This signal is emitted by %Gtk::Widget during the dispose phase of object * destruction. See the * Reference count section in the GObject concepts documentation * for the specification of the dispose and the finalize phases of object * destruction. After dispose, the object is not supposed to hold any reference * to other member objects. * * Dispose may be called multiple times, so your implementation of this * signal must tolerate that. * * @par Slot Prototype: * void on_my_%destroy() * * Flags: Run Cleanup, No Recurse, No Hooks * * Signals that all holders of a reference to the widget should release * the reference that they hold. * * May result in finalization of the widget if all references are released. * * This signal is not suitable for saving widget state. * * @newin{4,8} */ Glib::SignalProxy signal_destroy(); //Keybinding signals: /** * @par Slot Prototype: * bool on_my_%query_tooltip(int x, int y, bool keyboard_tooltip, const Glib::RefPtr& tooltip) * * Flags: Run Last * * Emitted when the widget’s tooltip is about to be shown. * * This happens when the property_has_tooltip() property * is true and the hover timeout has expired with the cursor hovering * "above" @a widget; or emitted when @a widget got focus in keyboard mode. * * Using the given coordinates, the signal handler should determine * whether a tooltip should be shown for @a widget. If this is the case * true should be returned, false otherwise. Note that if * @a keyboard_tooltip is true, the values of @a x and @a y are undefined and * should not be used. * * The signal handler is free to manipulate @a tooltip with the therefore * destined function calls. * * @param x The x coordinate of the cursor position where the request has * been emitted, relative to @a widget's left side. * @param y The y coordinate of the cursor position where the request has * been emitted, relative to @a widget's top. * @param keyboard_tooltip true if the tooltip was triggered using the keyboard. * @param tooltip A `Gtk::Tooltip`. * @return true if @a tooltip should be shown right now, false otherwise. */ Glib::SignalProxy&)> signal_query_tooltip(); // properties /** The name of the widget. * * Default value: "" * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< Glib::ustring > property_name() ; /** The name of the widget. * * Default value: "" * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< Glib::ustring > property_name() const; /** The parent widget of this widget. * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< Widget* > property_parent() const; /** The `Gtk::Root` widget of the widget tree containing this widget. * * This will be nullptr if the widget is not contained in a root widget. * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< Root* > property_root() const; /** Override for width request of the widget. * * If this is -1, the natural request will be used. * * Default value: -1 * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< int > property_width_request() ; /** Override for width request of the widget. * * If this is -1, the natural request will be used. * * Default value: -1 * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< int > property_width_request() const; /** Override for height request of the widget. * * If this is -1, the natural request will be used. * * Default value: -1 * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< int > property_height_request() ; /** Override for height request of the widget. * * If this is -1, the natural request will be used. * * Default value: -1 * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< int > property_height_request() const; /** Whether the widget is visible. * * Default value: true * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< bool > property_visible() ; /** Whether the widget is visible. * * Default value: true * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< bool > property_visible() const; /** Whether the widget responds to input. * * Default value: true * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< bool > property_sensitive() ; /** Whether the widget responds to input. * * Default value: true * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< bool > property_sensitive() const; /** Whether the widget or any of its descendents can accept * the input focus. * * This property is meant to be set by widget implementations, * typically in their instance init function. * * Default value: true * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< bool > property_can_focus() ; /** Whether the widget or any of its descendents can accept * the input focus. * * This property is meant to be set by widget implementations, * typically in their instance init function. * * Default value: true * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< bool > property_can_focus() const; /** Whether the widget has the input focus. * * Default value: false * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< bool > property_has_focus() const; /** Whether the widget can receive pointer events. * * Default value: true * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< bool > property_can_target() ; /** Whether the widget can receive pointer events. * * Default value: true * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< bool > property_can_target() const; /** Whether the widget should grab focus when it is clicked with the mouse. * * This property is only relevant for widgets that can take focus. * * Default value: true * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< bool > property_focus_on_click() ; /** Whether the widget should grab focus when it is clicked with the mouse. * * This property is only relevant for widgets that can take focus. * * Default value: true * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< bool > property_focus_on_click() const; /** Whether this widget itself will accept the input focus. * * Default value: false * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< bool > property_focusable() ; /** Whether this widget itself will accept the input focus. * * Default value: false * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< bool > property_focusable() const; /** Whether the widget is the default widget. * * Default value: false * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< bool > property_has_default() const; /** Whether the widget will receive the default action when it is focused. * * Default value: false * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< bool > property_receives_default() ; /** Whether the widget will receive the default action when it is focused. * * Default value: false * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< bool > property_receives_default() const; /** The cursor used by @a widget. * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< Glib::RefPtr > property_cursor() ; /** The cursor used by @a widget. * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< Glib::RefPtr > property_cursor() const; /** Enables or disables the emission of the signal_query_tooltip() signal on @a widget. * * A value of true indicates that @a widget can have a tooltip, in this case * the widget will be queried using signal_query_tooltip() to * determine whether it will provide a tooltip or not. * * Default value: false * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< bool > property_has_tooltip() ; /** Enables or disables the emission of the signal_query_tooltip() signal on @a widget. * * A value of true indicates that @a widget can have a tooltip, in this case * the widget will be queried using signal_query_tooltip() to * determine whether it will provide a tooltip or not. * * Default value: false * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< bool > property_has_tooltip() const; /** Sets the text of tooltip to be the given string, which is marked up * with Pango markup. * * Also see Gtk::Tooltip::set_markup(). * * This is a convenience property which will take care of getting the * tooltip shown if the given string is not nullptr: * property_has_tooltip() will automatically be set to true * and there will be taken care of signal_query_tooltip() in * the default signal handler. * * Note that if both property_tooltip_text() and * property_tooltip_markup() are set, the last one wins. * * Default value: "" * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< Glib::ustring > property_tooltip_markup() ; /** Sets the text of tooltip to be the given string, which is marked up * with Pango markup. * * Also see Gtk::Tooltip::set_markup(). * * This is a convenience property which will take care of getting the * tooltip shown if the given string is not nullptr: * property_has_tooltip() will automatically be set to true * and there will be taken care of signal_query_tooltip() in * the default signal handler. * * Note that if both property_tooltip_text() and * property_tooltip_markup() are set, the last one wins. * * Default value: "" * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< Glib::ustring > property_tooltip_markup() const; /** Sets the text of tooltip to be the given string. * * Also see Gtk::Tooltip::set_text(). * * This is a convenience property which will take care of getting the * tooltip shown if the given string is not nullptr: * property_has_tooltip() will automatically be set to true * and there will be taken care of signal_query_tooltip() in * the default signal handler. * * Note that if both property_tooltip_text() and * property_tooltip_markup() are set, the last one wins. * * Default value: "" * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< Glib::ustring > property_tooltip_text() ; /** Sets the text of tooltip to be the given string. * * Also see Gtk::Tooltip::set_text(). * * This is a convenience property which will take care of getting the * tooltip shown if the given string is not nullptr: * property_has_tooltip() will automatically be set to true * and there will be taken care of signal_query_tooltip() in * the default signal handler. * * Note that if both property_tooltip_text() and * property_tooltip_markup() are set, the last one wins. * * Default value: "" * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< Glib::ustring > property_tooltip_text() const; /** How to distribute horizontal space if widget gets extra space. * * Default value: Gtk::Align::FILL * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< Align > property_halign() ; /** How to distribute horizontal space if widget gets extra space. * * Default value: Gtk::Align::FILL * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< Align > property_halign() const; /** How to distribute vertical space if widget gets extra space. * * Default value: Gtk::Align::FILL * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< Align > property_valign() ; /** How to distribute vertical space if widget gets extra space. * * Default value: Gtk::Align::FILL * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< Align > property_valign() const; /** Margin on start of widget, horizontally. * * This property supports left-to-right and right-to-left text * directions. * * This property adds margin outside of the widget's normal size * request, the margin will be added in addition to the size from * Gtk::Widget::set_size_request() for example. * * Default value: 0 * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< int > property_margin_start() ; /** Margin on start of widget, horizontally. * * This property supports left-to-right and right-to-left text * directions. * * This property adds margin outside of the widget's normal size * request, the margin will be added in addition to the size from * Gtk::Widget::set_size_request() for example. * * Default value: 0 * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< int > property_margin_start() const; /** Margin on end of widget, horizontally. * * This property supports left-to-right and right-to-left text * directions. * * This property adds margin outside of the widget's normal size * request, the margin will be added in addition to the size from * Gtk::Widget::set_size_request() for example. * * Default value: 0 * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< int > property_margin_end() ; /** Margin on end of widget, horizontally. * * This property supports left-to-right and right-to-left text * directions. * * This property adds margin outside of the widget's normal size * request, the margin will be added in addition to the size from * Gtk::Widget::set_size_request() for example. * * Default value: 0 * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< int > property_margin_end() const; /** Margin on top side of widget. * * This property adds margin outside of the widget's normal size * request, the margin will be added in addition to the size from * Gtk::Widget::set_size_request() for example. * * Default value: 0 * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< int > property_margin_top() ; /** Margin on top side of widget. * * This property adds margin outside of the widget's normal size * request, the margin will be added in addition to the size from * Gtk::Widget::set_size_request() for example. * * Default value: 0 * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< int > property_margin_top() const; /** Margin on bottom side of widget. * * This property adds margin outside of the widget's normal size * request, the margin will be added in addition to the size from * Gtk::Widget::set_size_request() for example. * * Default value: 0 * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< int > property_margin_bottom() ; /** Margin on bottom side of widget. * * This property adds margin outside of the widget's normal size * request, the margin will be added in addition to the size from * Gtk::Widget::set_size_request() for example. * * Default value: 0 * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< int > property_margin_bottom() const; /** Whether to expand horizontally. * * Default value: false * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< bool > property_hexpand() ; /** Whether to expand horizontally. * * Default value: false * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< bool > property_hexpand() const; /** Whether to use the `hexpand` property. * * Default value: false * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< bool > property_hexpand_set() ; /** Whether to use the `hexpand` property. * * Default value: false * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< bool > property_hexpand_set() const; /** Whether to expand vertically. * * Default value: false * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< bool > property_vexpand() ; /** Whether to expand vertically. * * Default value: false * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< bool > property_vexpand() const; /** Whether to use the `vexpand` property. * * Default value: false * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< bool > property_vexpand_set() ; /** Whether to use the `vexpand` property. * * Default value: false * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< bool > property_vexpand_set() const; /** The requested opacity of the widget. * * Default value: 1 * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< double > property_opacity() ; /** The requested opacity of the widget. * * Default value: 1 * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< double > property_opacity() const; /** How content outside the widget's content area is treated. * * This property is meant to be set by widget implementations, * typically in their instance init function. * * @newin{3,96} * * Default value: Gtk::Overflow::VISIBLE * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< Overflow > property_overflow() ; /** How content outside the widget's content area is treated. * * This property is meant to be set by widget implementations, * typically in their instance init function. * * @newin{3,96} * * Default value: Gtk::Overflow::VISIBLE * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< Overflow > property_overflow() const; /** The scale factor of the widget. * * Default value: 1 * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< int > property_scale_factor() const; /** The name of this widget in the CSS tree. * * This property is meant to be set by widget implementations, * typically in their instance init function. * * Default value: "" * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< Glib::ustring > property_css_name() const; /** A list of css classes applied to this widget. * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< std::vector > property_css_classes() ; /** A list of css classes applied to this widget. * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< std::vector > property_css_classes() const; /** The `Gtk::LayoutManager` instance to use to compute the preferred size * of the widget, and allocate its children. * * This property is meant to be set by widget implementations, * typically in their instance init function. * * @return A PropertyProxy that allows you to get or set the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy< Glib::RefPtr > property_layout_manager() ; /** The `Gtk::LayoutManager` instance to use to compute the preferred size * of the widget, and allocate its children. * * This property is meant to be set by widget implementations, * typically in their instance init function. * * @return A PropertyProxy_ReadOnly that allows you to get the value of the property, * or receive notification when the value of the property changes. */ Glib::PropertyProxy_ReadOnly< Glib::RefPtr > property_layout_manager() const; // vfuncs protected: virtual void root_vfunc(); virtual void unroot_vfunc(); virtual void size_allocate_vfunc(int width, int height, int baseline); virtual SizeRequestMode get_request_mode_vfunc() const; virtual void measure_vfunc(Orientation orientation, int for_size, int& minimum, int& natural, int& minimum_baseline, int& natural_baseline) const; virtual bool grab_focus_vfunc(); /** Sets the focused child of widget. * * @param child The child widget. */ virtual void set_focus_child_vfunc(Widget* child); virtual void compute_expand_vfunc(bool& hexpand_p, bool& vexpand_p); virtual bool contains_vfunc(double x, double y) const; virtual void snapshot_vfunc(const Glib::RefPtr& snapshot); /* TODO: Some vfuncs are in GTK4 but not gtkmm4, & so cannot add until gtkmm5: * css_changed * focus * system_setting_changed */ protected: Widget(); /** Creates the GDK resources associated with a widget. * * Normally realization happens implicitly; if you show a widget * and all its parent containers, then the widget will be realized * and mapped automatically. * * Realizing a widget requires all the widget’s parent widgets to be * realized; calling this function realizes the widget’s parents * in addition to @a widget itself. If a widget is not yet inside a * toplevel window when you realize it, bad things will happen. * * This function is primarily used in widget implementations, and * isn’t very useful otherwise. Many times when you think you might * need it, a better approach is to connect to a signal that will be * called after the widget is realized automatically, such as * signal_realize(). */ void realize(); /** Causes a widget to be unrealized (frees all GDK resources * associated with the widget). * * This function is only useful in widget implementations. */ void unrealize(); void realize_if_needed(); /** Set @a child as the current focus child of @a widget. * * This function is only suitable for widget implementations. * If you want a certain widget to get the input focus, call * grab_focus() on it. * * @param child A direct child widget of @a widget or nullptr * to unset the focus child of @a widget. */ void set_focus_child(Widget& child); /** Unsets the focus child of the widget. * * The previous focus child will be unset. * * This function is only suitable for widget implementations. */ void unset_focus_child(); /** Returns the current focus child of @a widget. * * @return The current focus * child of @a widget. */ Widget* get_focus_child(); /** Returns the current focus child of @a widget. * * @return The current focus * child of @a widget. */ const Widget* get_focus_child() const; public: public: //C++ methods used to invoke GTK+ virtual functions: protected: //GTK+ Virtual Functions (override these to change behaviour): //Default Signal Handlers:: /// This is a default handler for the signal signal_show(). virtual void on_show(); /// This is a default handler for the signal signal_hide(). virtual void on_hide(); /// This is a default handler for the signal signal_map(). virtual void on_map(); /// This is a default handler for the signal signal_unmap(). virtual void on_unmap(); /// This is a default handler for the signal signal_realize(). virtual void on_realize(); /// This is a default handler for the signal signal_unrealize(). virtual void on_unrealize(); /// This is a default handler for the signal signal_state_flags_changed(). virtual void on_state_flags_changed(Gtk::StateFlags previous_state_flags); /// This is a default handler for the signal signal_direction_changed(). virtual void on_direction_changed(TextDirection direction); /// This is a default handler for the signal signal_mnemonic_activate(). virtual bool on_mnemonic_activate(bool group_cycling); /// This is a default handler for the signal signal_query_tooltip(). virtual bool on_query_tooltip(int x, int y, bool keyboard_tooltip, const Glib::RefPtr& tooltip); }; } // namespace Gtk namespace Glib { /** A Glib::wrap() method for this object. * * @param object The C instance. * @param take_copy False if the result should take ownership of the C instance. True if it should take a new copy or ref. * @result A C++ instance that wraps this C instance. * * @relates Gtk::Widget */ GTKMM_API Gtk::Widget* wrap(GtkWidget* object, bool take_copy = false); } //namespace Glib #endif /* _GTKMM_WIDGET_H */