mirror of
https://github.com/brl/mutter.git
synced 2025-02-17 05:44:08 +00:00
compositor: Introduce MetaCompositorViewNative
This class is meant to hold logic specific to the native backend in the context of a MetaCompositorView. Its addition requires making MetaCompositorView inheritable, and an addition of a virtual function which allows each compositor to create its own MetaCompositorView instance. In the case of the MetaCompositorNative, a MetaCompositorViewNative is created. In all other cases, a MetaCompositorView is created. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2526>
This commit is contained in:
parent
85b8632cd6
commit
259a9998d8
@ -35,6 +35,9 @@ struct _MetaCompositorClass
|
|||||||
int64_t time_us);
|
int64_t time_us);
|
||||||
void (* grab_begin) (MetaCompositor *compositor);
|
void (* grab_begin) (MetaCompositor *compositor);
|
||||||
void (* grab_end) (MetaCompositor *compositor);
|
void (* grab_end) (MetaCompositor *compositor);
|
||||||
|
|
||||||
|
MetaCompositorView * (* create_view) (MetaCompositor *compositor,
|
||||||
|
ClutterStageView *stage_view);
|
||||||
};
|
};
|
||||||
|
|
||||||
gboolean meta_compositor_do_manage (MetaCompositor *compositor,
|
gboolean meta_compositor_do_manage (MetaCompositor *compositor,
|
||||||
|
@ -417,6 +417,14 @@ meta_compositor_redirect_x11_windows (MetaCompositor *compositor)
|
|||||||
redirect_windows (display->x11_display);
|
redirect_windows (display->x11_display);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static MetaCompositorView *
|
||||||
|
meta_compositor_create_view (MetaCompositor *compositor,
|
||||||
|
ClutterStageView *stage_view)
|
||||||
|
{
|
||||||
|
return META_COMPOSITOR_GET_CLASS (compositor)->create_view (compositor,
|
||||||
|
stage_view);
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
meta_compositor_do_manage (MetaCompositor *compositor,
|
meta_compositor_do_manage (MetaCompositor *compositor,
|
||||||
GError **error)
|
GError **error)
|
||||||
@ -1004,7 +1012,8 @@ meta_compositor_ensure_compositor_views (MetaCompositor *compositor)
|
|||||||
if (compositor_view)
|
if (compositor_view)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
compositor_view = meta_compositor_view_new (stage_view);
|
compositor_view = meta_compositor_create_view (compositor,
|
||||||
|
stage_view);
|
||||||
|
|
||||||
g_object_set_qdata_full (G_OBJECT (stage_view),
|
g_object_set_qdata_full (G_OBJECT (stage_view),
|
||||||
quark_compositor_view,
|
quark_compositor_view,
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include "backends/meta-logical-monitor.h"
|
#include "backends/meta-logical-monitor.h"
|
||||||
#include "backends/native/meta-crtc-kms.h"
|
#include "backends/native/meta-crtc-kms.h"
|
||||||
|
#include "compositor/meta-compositor-view-native.h"
|
||||||
#include "compositor/meta-surface-actor-wayland.h"
|
#include "compositor/meta-surface-actor-wayland.h"
|
||||||
|
|
||||||
struct _MetaCompositorNative
|
struct _MetaCompositorNative
|
||||||
@ -169,6 +170,17 @@ meta_compositor_native_before_paint (MetaCompositor *compositor,
|
|||||||
parent_class->before_paint (compositor, compositor_view);
|
parent_class->before_paint (compositor, compositor_view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static MetaCompositorView *
|
||||||
|
meta_compositor_native_create_view (MetaCompositor *compositor,
|
||||||
|
ClutterStageView *stage_view)
|
||||||
|
{
|
||||||
|
MetaCompositorViewNative *compositor_view_native;
|
||||||
|
|
||||||
|
compositor_view_native = meta_compositor_view_native_new (stage_view);
|
||||||
|
|
||||||
|
return META_COMPOSITOR_VIEW (compositor_view_native);
|
||||||
|
}
|
||||||
|
|
||||||
MetaCompositorNative *
|
MetaCompositorNative *
|
||||||
meta_compositor_native_new (MetaDisplay *display,
|
meta_compositor_native_new (MetaDisplay *display,
|
||||||
MetaBackend *backend)
|
MetaBackend *backend)
|
||||||
@ -203,4 +215,5 @@ meta_compositor_native_class_init (MetaCompositorNativeClass *klass)
|
|||||||
object_class->finalize = meta_compositor_native_finalize;
|
object_class->finalize = meta_compositor_native_finalize;
|
||||||
|
|
||||||
compositor_class->before_paint = meta_compositor_native_before_paint;
|
compositor_class->before_paint = meta_compositor_native_before_paint;
|
||||||
|
compositor_class->create_view = meta_compositor_native_create_view;
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#include "backends/meta-dnd-private.h"
|
#include "backends/meta-dnd-private.h"
|
||||||
#include "compositor/meta-compositor-server.h"
|
#include "compositor/meta-compositor-server.h"
|
||||||
|
#include "compositor/meta-compositor-view.h"
|
||||||
#include "core/display-private.h"
|
#include "core/display-private.h"
|
||||||
|
|
||||||
G_DEFINE_TYPE (MetaCompositorServer, meta_compositor_server, META_TYPE_COMPOSITOR)
|
G_DEFINE_TYPE (MetaCompositorServer, meta_compositor_server, META_TYPE_COMPOSITOR)
|
||||||
@ -66,6 +67,13 @@ meta_compositor_server_grab_end (MetaCompositor *compositor)
|
|||||||
meta_display_sync_wayland_input_focus (display);
|
meta_display_sync_wayland_input_focus (display);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static MetaCompositorView *
|
||||||
|
meta_compositor_server_create_view (MetaCompositor *compositor,
|
||||||
|
ClutterStageView *stage_view)
|
||||||
|
{
|
||||||
|
return meta_compositor_view_new (stage_view);
|
||||||
|
}
|
||||||
|
|
||||||
MetaCompositorServer *
|
MetaCompositorServer *
|
||||||
meta_compositor_server_new (MetaDisplay *display,
|
meta_compositor_server_new (MetaDisplay *display,
|
||||||
MetaBackend *backend)
|
MetaBackend *backend)
|
||||||
@ -91,4 +99,5 @@ meta_compositor_server_class_init (MetaCompositorServerClass *klass)
|
|||||||
meta_compositor_server_monotonic_to_high_res_xserver_time;
|
meta_compositor_server_monotonic_to_high_res_xserver_time;
|
||||||
compositor_class->grab_begin = meta_compositor_server_grab_begin;
|
compositor_class->grab_begin = meta_compositor_server_grab_begin;
|
||||||
compositor_class->grab_end = meta_compositor_server_grab_end;
|
compositor_class->grab_end = meta_compositor_server_grab_end;
|
||||||
|
compositor_class->create_view = meta_compositor_server_create_view;
|
||||||
}
|
}
|
||||||
|
55
src/compositor/meta-compositor-view-native.c
Normal file
55
src/compositor/meta-compositor-view-native.c
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2022 Dor Askayo
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program 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
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
* 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* Written by:
|
||||||
|
* Dor Askayo <dor.askayo@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include "compositor/meta-compositor-view-native.h"
|
||||||
|
|
||||||
|
struct _MetaCompositorViewNative
|
||||||
|
{
|
||||||
|
MetaCompositorView parent;
|
||||||
|
};
|
||||||
|
|
||||||
|
G_DEFINE_TYPE (MetaCompositorViewNative, meta_compositor_view_native,
|
||||||
|
META_TYPE_COMPOSITOR_VIEW)
|
||||||
|
|
||||||
|
MetaCompositorViewNative *
|
||||||
|
meta_compositor_view_native_new (ClutterStageView *stage_view)
|
||||||
|
{
|
||||||
|
g_assert (stage_view != NULL);
|
||||||
|
|
||||||
|
return g_object_new (META_TYPE_COMPOSITOR_VIEW_NATIVE,
|
||||||
|
"stage-view", stage_view,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_compositor_view_native_class_init (MetaCompositorViewNativeClass *klass)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_compositor_view_native_init (MetaCompositorViewNative *view_native)
|
||||||
|
{
|
||||||
|
}
|
37
src/compositor/meta-compositor-view-native.h
Normal file
37
src/compositor/meta-compositor-view-native.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2022 Dor Askayo
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program 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
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
* 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* Written by:
|
||||||
|
* Dor Askayo <dor.askayo@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef META_COMPOSITOR_VIEW_NATIVE_H
|
||||||
|
#define META_COMPOSITOR_VIEW_NATIVE_H
|
||||||
|
|
||||||
|
#include "clutter/clutter-mutter.h"
|
||||||
|
#include "compositor/meta-compositor-view.h"
|
||||||
|
|
||||||
|
#define META_TYPE_COMPOSITOR_VIEW_NATIVE (meta_compositor_view_native_get_type ())
|
||||||
|
G_DECLARE_FINAL_TYPE (MetaCompositorViewNative, meta_compositor_view_native,
|
||||||
|
META, COMPOSITOR_VIEW_NATIVE, MetaCompositorView)
|
||||||
|
|
||||||
|
MetaCompositorViewNative *meta_compositor_view_native_new (ClutterStageView *stage_view);
|
||||||
|
|
||||||
|
#endif /* META_COMPOSITOR_VIEW_NATIVE_H */
|
@ -36,7 +36,7 @@ struct _MetaCompositorViewClass
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define META_TYPE_COMPOSITOR_VIEW (meta_compositor_view_get_type ())
|
#define META_TYPE_COMPOSITOR_VIEW (meta_compositor_view_get_type ())
|
||||||
G_DECLARE_FINAL_TYPE (MetaCompositorView, meta_compositor_view,
|
G_DECLARE_DERIVABLE_TYPE (MetaCompositorView, meta_compositor_view,
|
||||||
META, COMPOSITOR_VIEW, GObject)
|
META, COMPOSITOR_VIEW, GObject)
|
||||||
|
|
||||||
MetaCompositorView *meta_compositor_view_new (ClutterStageView *stage_view);
|
MetaCompositorView *meta_compositor_view_new (ClutterStageView *stage_view);
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include "backends/x11/meta-backend-x11.h"
|
#include "backends/x11/meta-backend-x11.h"
|
||||||
#include "backends/x11/meta-clutter-backend-x11.h"
|
#include "backends/x11/meta-clutter-backend-x11.h"
|
||||||
#include "backends/x11/meta-event-x11.h"
|
#include "backends/x11/meta-event-x11.h"
|
||||||
|
#include "compositor/meta-compositor-view.h"
|
||||||
#include "compositor/meta-sync-ring.h"
|
#include "compositor/meta-sync-ring.h"
|
||||||
#include "compositor/meta-window-actor-x11.h"
|
#include "compositor/meta-window-actor-x11.h"
|
||||||
#include "core/display-private.h"
|
#include "core/display-private.h"
|
||||||
@ -458,6 +459,13 @@ meta_compositor_x11_grab_end (MetaCompositor *compositor)
|
|||||||
meta_backend_x11_sync_pointer (backend_x11);
|
meta_backend_x11_sync_pointer (backend_x11);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static MetaCompositorView *
|
||||||
|
meta_compositor_x11_create_view (MetaCompositor *compositor,
|
||||||
|
ClutterStageView *stage_view)
|
||||||
|
{
|
||||||
|
return meta_compositor_view_new (stage_view);
|
||||||
|
}
|
||||||
|
|
||||||
Window
|
Window
|
||||||
meta_compositor_x11_get_output_xwindow (MetaCompositorX11 *compositor_x11)
|
meta_compositor_x11_get_output_xwindow (MetaCompositorX11 *compositor_x11)
|
||||||
{
|
{
|
||||||
@ -532,4 +540,5 @@ meta_compositor_x11_class_init (MetaCompositorX11Class *klass)
|
|||||||
meta_compositor_x11_monotonic_to_high_res_xserver_time;
|
meta_compositor_x11_monotonic_to_high_res_xserver_time;
|
||||||
compositor_class->grab_begin = meta_compositor_x11_grab_begin;
|
compositor_class->grab_begin = meta_compositor_x11_grab_begin;
|
||||||
compositor_class->grab_end = meta_compositor_x11_grab_end;
|
compositor_class->grab_end = meta_compositor_x11_grab_end;
|
||||||
|
compositor_class->create_view = meta_compositor_x11_create_view;
|
||||||
}
|
}
|
||||||
|
@ -793,6 +793,8 @@ if have_native_backend
|
|||||||
'backends/native/meta-xkb-utils.h',
|
'backends/native/meta-xkb-utils.h',
|
||||||
'compositor/meta-compositor-native.c',
|
'compositor/meta-compositor-native.c',
|
||||||
'compositor/meta-compositor-native.h',
|
'compositor/meta-compositor-native.h',
|
||||||
|
'compositor/meta-compositor-view-native.c',
|
||||||
|
'compositor/meta-compositor-view-native.h',
|
||||||
]
|
]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user