[gtk+/wip/attachment-rectangle: 1/10] gdk: add gdk_window_set_attachment_rectangle ()



commit 76b38364c564243d45f905fffcc1b5c7d3f0f9f5
Author: William Hua <william hua canonical com>
Date:   Thu Jul 16 10:21:19 2015 -0400

    gdk: add gdk_window_set_attachment_rectangle ()
    
    An attachment rectangle is a rectangle that a window needs
    to be aligned with.
    
    The window manager might want this information to do more
    active positioning of a window. For example, menus and
    tooltips might have to be re-positioned if they spill over
    the edges of the screen.

 gdk/gdkwindow.c     |   30 ++++++++++++++++++++++++++++++
 gdk/gdkwindow.h     |   30 ++++++++++++++++++++++++++++++
 gdk/gdkwindowimpl.h |    3 +++
 3 files changed, 63 insertions(+), 0 deletions(-)
---
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index af3d17a..b119fa3 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -11335,3 +11335,33 @@ gdk_window_show_window_menu (GdkWindow *window,
   else
     return FALSE;
 }
+
+/**
+ * gdk_window_set_attachment_rectangle:
+ * @window: a #GdkWindow
+ * @edge: the preferred edge to attach to
+ * @rect: (allow-none): a #GdkRectangle or %NULL
+ *
+ * An attachment rectangle is a rectangle that a window needs to be
+ * aligned with.
+ *
+ * The window manager might want this information to do more active
+ * positioning of a window. For example, menus and tooltips might
+ * have to be re-positioned if they spill over the edges of the
+ * screen.
+ */
+void
+gdk_window_set_attachment_rectangle (GdkWindow          *window,
+                                     GdkAttachmentEdge   edge,
+                                     const GdkRectangle *rect)
+{
+  GdkWindowImplClass *impl_class;
+
+  g_return_if_fail (GDK_IS_WINDOW (window));
+  g_return_if_fail (!GDK_WINDOW_DESTROYED (window));
+
+  impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
+
+  if (impl_class->set_attachment_rectangle)
+    impl_class->set_attachment_rectangle (window, edge, rect);
+}
diff --git a/gdk/gdkwindow.h b/gdk/gdkwindow.h
index 98c59b8..dd41783 100644
--- a/gdk/gdkwindow.h
+++ b/gdk/gdkwindow.h
@@ -320,6 +320,31 @@ typedef enum
 } GdkWindowEdge;
 
 /**
+ * GdkAttachmentEdge:
+ * @GDK_ATTACHMENT_EDGE_NONE: no edge.
+ * @GDK_ATTACHMENT_EDGE_TOP: the top edge.
+ * @GDK_ATTACHMENT_EDGE_BOTTOM: the bottom edge.
+ * @GDK_ATTACHMENT_EDGE_LEFT: the left edge.
+ * @GDK_ATTACHMENT_EDGE_RIGHT: the right edge.
+ * @GDK_ATTACHMENT_EDGE_HORIZONTAL: the top or bottom edge.
+ * @GDK_ATTACHMENT_EDGE_VERTICAL: the left or right edge.
+ * @GDK_ATTACHMENT_EDGE_ANY: any edge.
+ *
+ * Determines an edge of an attachment rectangle.
+ */
+typedef enum
+{
+  GDK_ATTACHMENT_EDGE_NONE       = 0,
+  GDK_ATTACHMENT_EDGE_TOP        = 1 << 0,
+  GDK_ATTACHMENT_EDGE_BOTTOM     = 1 << 1,
+  GDK_ATTACHMENT_EDGE_LEFT       = 1 << 2,
+  GDK_ATTACHMENT_EDGE_RIGHT      = 1 << 3,
+  GDK_ATTACHMENT_EDGE_HORIZONTAL = GDK_ATTACHMENT_EDGE_TOP | GDK_ATTACHMENT_EDGE_BOTTOM,
+  GDK_ATTACHMENT_EDGE_VERTICAL   = GDK_ATTACHMENT_EDGE_LEFT | GDK_ATTACHMENT_EDGE_RIGHT,
+  GDK_ATTACHMENT_EDGE_ANY        = GDK_ATTACHMENT_EDGE_HORIZONTAL | GDK_ATTACHMENT_EDGE_VERTICAL
+} GdkAttachmentEdge;
+
+/**
  * GdkFullscreenMode:
  * @GDK_FULLSCREEN_ON_CURRENT_MONITOR: Fullscreen on current monitor only.
  * @GDK_FULLSCREEN_ON_ALL_MONITORS: Span across all monitors when fullscreen.
@@ -1121,6 +1146,11 @@ GDK_AVAILABLE_IN_3_16
 GdkGLContext * gdk_window_create_gl_context    (GdkWindow      *window,
                                                 GError        **error);
 
+GDK_AVAILABLE_IN_3_18
+void       gdk_window_set_attachment_rectangle (GdkWindow          *window,
+                                                GdkAttachmentEdge   edge,
+                                                const GdkRectangle *rect);
+
 G_END_DECLS
 
 #endif /* __GDK_WINDOW_H__ */
diff --git a/gdk/gdkwindowimpl.h b/gdk/gdkwindowimpl.h
index 73a819a..5205e7c 100644
--- a/gdk/gdkwindowimpl.h
+++ b/gdk/gdkwindowimpl.h
@@ -300,6 +300,9 @@ struct _GdkWindowImplClass
                                            GError        **error);
   void         (*invalidate_for_new_frame)(GdkWindow      *window,
                                            cairo_region_t *update_area);
+  void         (*set_attachment_rectangle) (GdkWindow          *window,
+                                            GdkAttachmentEdge   edge,
+                                            const GdkRectangle *rect);
 };
 
 /* Interface Functions */


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