aboutsummaryrefslogtreecommitdiffstats
path: root/matchbox/core/mb-wm-object.h
blob: eb49b52558a1d5a3373b6f8b34f795d60b980382 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/*
 *  Matchbox Window Manager II - A lightweight window manager not for the
 *                               desktop.
 *
 *  Authored By Matthew Allum <mallum@o-hand.com>
 *
 *  Copyright (c) 2005 OpenedHand Ltd - http://o-hand.com
 *
 *  SPDX-License-Identifier: GPL-2.0-or-later
 *
 */

#ifndef _HAVE_MB_OBJECT_H
#define _HAVE_MB_OBJECT_H

#include <stdarg.h>
#include <matchbox/core/mb-wm-object-props.h>

typedef struct MBWMObject       MBWMObject;
typedef struct MBWMObjectClass  MBWMObjectClass;

typedef void (*MBWMObjFunc)     (MBWMObject* obj);
typedef int  (*MBWMObjVargFunc) (MBWMObject* obj, va_list vap);
typedef void (*MBWMClassFunc)   (MBWMObjectClass* klass);

#define MB_WM_TYPE_OBJECT 0
#define MB_WM_OBJECT(x) ((MBWMObject*)(x))
#define MB_WM_OBJECT_CLASS(x) ((MBWMObjectClass*)(x))
#define MB_WM_OBJECT_TYPE(x) (((MBWMObject*)(x))->klass->type)
#define MB_WM_OBJECT_GET_CLASS(x) (mb_wm_object_get_class (MB_WM_OBJECT(x)))
#define MB_WM_OBJECT_GET_PARENT_CLASS(x) \
    ((mb_wm_object_get_class (MB_WM_OBJECT(x)))->parent)

typedef enum  MBWMObjectClassType
{
  MB_WM_OBJECT_TYPE_CLASS     = 0,
  MB_WM_OBJECT_TYPE_ABSTRACT,
  MB_WM_OBJECT_TYPE_SINGLETON
}
MBWMObjectClassType;

typedef struct MBWMObjectClassInfo
{
  size_t              klass_size;
  size_t              instance_size;
  MBWMObjVargFunc     instance_init;
  MBWMObjFunc         instance_destroy;
  MBWMClassFunc       class_init;
}
MBWMObjectClassInfo;

struct MBWMObjectClass
{
  int              type;
  MBWMObjectClass *parent;
  MBWMObjVargFunc  init;
  MBWMObjFunc      destroy;
  MBWMClassFunc    class_init;

#if MBWM_WANT_DEBUG
  const char         *klass_name;
#endif
};

struct MBWMObject
{
  MBWMObjectClass *klass;
  int              refcnt;

  MBWMList        *callbacks;

#if MBWM_WANT_DEBUG
  char           **trace_strings;
  int              trace_depth;
#endif
};

/* returns True to stop signal emission */
typedef Bool (*MBWMObjectCallbackFunc) (MBWMObject *obj,
					int         mask,
					void       *userdata);


void
mb_wm_object_init(void);

int
mb_wm_object_register_class (MBWMObjectClassInfo *info,
			     int                  parent_type,
			     int                  flags);

void *
mb_wm_object_ref (MBWMObject *this);

void
mb_wm_object_unref (MBWMObject *this);

MBWMObject*
mb_wm_object_new (int type, ...);

const MBWMObjectClass*
mb_wm_object_get_class (MBWMObject *this);

unsigned long
mb_wm_object_signal_connect (MBWMObject            *obj,
			     unsigned long          signal,
			     MBWMObjectCallbackFunc func,
			     void                  *userdata);

void
mb_wm_object_signal_disconnect (MBWMObject    *obj,
				unsigned long  id);

void
mb_wm_object_signal_emit (MBWMObject *obj, unsigned long signal);

#if MBWM_WANT_DEBUG
void
mb_wm_object_dump ();
#endif

#endif