Make sure to reset all the GSource timer ids
[mikachu/openbox.git] / openbox / frame.h
index 02be17a..ae29c3b 100644 (file)
@@ -21,7 +21,7 @@
 #define __frame_h
 
 #include "geom.h"
-#include "render/render.h"
+#include "obrender/render.h"
 
 typedef struct _ObFrame ObFrame;
 
@@ -53,9 +53,16 @@ typedef enum {
     /*! This is a special context, which occurs while dragging a window in
       a move/resize */
     OB_FRAME_CONTEXT_MOVE_RESIZE,
+    OB_FRAME_CONTEXT_DOCK,
     OB_FRAME_NUM_CONTEXTS
 } ObFrameContext;
 
+#define FRAME_CONTEXT(co, cl) ((cl && cl->type != OB_CLIENT_TYPE_DESKTOP) ? \
+                               co == OB_FRAME_CONTEXT_FRAME : FALSE)
+#define CLIENT_CONTEXT(co, cl) ((cl && cl->type == OB_CLIENT_TYPE_DESKTOP) ? \
+                                co == OB_FRAME_CONTEXT_DESKTOP : \
+                                co == OB_FRAME_CONTEXT_CLIENT)
+
 /*! The decorations the client window wants to be displayed on it */
 typedef enum {
     OB_FRAME_DECOR_TITLEBAR    = 1 << 0, /*!< Display a titlebar */
@@ -68,7 +75,7 @@ typedef enum {
     /*! Display a button to toggle the window's placement on
       all desktops */
     OB_FRAME_DECOR_ALLDESKTOPS = 1 << 7,
-    OB_FRAME_DECOR_SHADE       = 1 << 8, /*!< Displays a shade button */
+    OB_FRAME_DECOR_SHADE       = 1 << 8, /*!< Display a shade button */
     OB_FRAME_DECOR_CLOSE       = 1 << 9  /*!< Display a close button */
 } ObFrameDecorations;
 
@@ -78,7 +85,8 @@ struct _ObFrame
 
     Window    window;
 
-    Strut     size;
+    Strut     size;    /* the size of the frame */
+    Strut     oldsize; /* the size of the frame last told to the client */
     Rect      area;
     gboolean  visible;
 
@@ -184,12 +192,14 @@ struct _ObFrame
     gboolean  flashing;
     gboolean  flash_on;
     GTimeVal  flash_end;
+    guint     flash_timer;
 
     /*! Is the frame currently in an animation for iconify or restore.
       0 means that it is not animating. > 0 means it is animating an iconify.
       < 0 means it is animating a restore.
     */
     gint iconify_animation_going;
+    guint iconify_animation_timer;
     GTimeVal  iconify_animation_end;
 };
 
@@ -199,6 +209,9 @@ void frame_free(ObFrame *self);
 void frame_show(ObFrame *self);
 void frame_hide(ObFrame *self);
 void frame_adjust_theme(ObFrame *self);
+#ifdef SHAPE
+void frame_adjust_shape_kind(ObFrame *self, int kind);
+#endif
 void frame_adjust_shape(ObFrame *self);
 void frame_adjust_area(ObFrame *self, gboolean moved,
                        gboolean resized, gboolean fake);
@@ -212,6 +225,16 @@ void frame_release_client(ObFrame *self);
 
 ObFrameContext frame_context_from_string(const gchar *name);
 
+/*! Parses a ObFrameContext from a string of space-separated context names.
+  @names The list of context names, the first of which is removed from the
+         string.
+  @cx The ObFrameContext is returned here.  If an invalid name is found, this
+      is set to OB_FRAME_CONTEXT_NONE.
+  @return TRUE if there was something to read in @names, FALSE if it was an
+          empty input.
+*/
+gboolean frame_next_context_from_string(gchar *names, ObFrameContext *cx);
+
 ObFrameContext frame_context(struct _ObClient *self, Window win,
                              gint x, gint y);
 
@@ -242,7 +265,7 @@ void frame_flash_stop(ObFrame *self);
   will be called when the animation finishes. But if another animation is
   started in the meantime, the callback will never get called. */
 void frame_begin_iconify_animation(ObFrame *self, gboolean iconifying);
-void frame_end_iconify_animation(ObFrame *self);
+void frame_end_iconify_animation(gpointer data);
 
 #define frame_iconify_animating(f) (f->iconify_animation_going != 0)