summaryrefslogtreecommitdiff
path: root/src/compositor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/compositor.c')
-rw-r--r--src/compositor.c62
1 files changed, 39 insertions, 23 deletions
diff --git a/src/compositor.c b/src/compositor.c
index bb1dfa9c..40e4b119 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -1509,7 +1509,7 @@ weston_buffer_from_resource(struct wl_resource *resource)
{
struct weston_buffer *buffer;
struct wl_listener *listener;
-
+
listener = wl_resource_get_destroy_listener(resource,
weston_buffer_destroy_handler);
@@ -1526,7 +1526,7 @@ weston_buffer_from_resource(struct wl_resource *resource)
buffer->destroy_listener.notify = weston_buffer_destroy_handler;
buffer->y_inverted = 1;
wl_resource_add_destroy_listener(resource, &buffer->destroy_listener);
-
+
return buffer;
}
@@ -2110,10 +2110,10 @@ weston_surface_commit(struct weston_surface *surface)
surface->buffer_viewport = surface->pending.buffer_viewport;
/* wl_surface.attach */
- if (surface->pending.buffer || surface->pending.newly_attached)
+ if (surface->pending.buffer || surface->pending.newly_attached) {
weston_surface_attach(surface, surface->pending.buffer);
-
- weston_surface_set_size_from_buffer(surface);
+ weston_surface_set_size_from_buffer(surface);
+ }
if (surface->configure && surface->pending.newly_attached)
surface->configure(surface,
@@ -2336,12 +2336,12 @@ weston_subsurface_commit_from_cache(struct weston_subsurface *sub)
surface->buffer_viewport = sub->cached.buffer_viewport;
/* wl_surface.attach */
- if (sub->cached.buffer_ref.buffer || sub->cached.newly_attached)
+ if (sub->cached.buffer_ref.buffer || sub->cached.newly_attached) {
weston_surface_attach(surface, sub->cached.buffer_ref.buffer);
+ weston_surface_set_size_from_buffer(surface);
+ }
weston_buffer_reference(&sub->cached.buffer_ref, NULL);
- weston_surface_set_size_from_buffer(surface);
-
if (surface->configure && sub->cached.newly_attached)
surface->configure(surface, sub->cached.sx, sub->cached.sy);
sub->cached.sx = 0;
@@ -3857,7 +3857,7 @@ print_backtrace(void)
filename = dlinfo.dli_fname;
else
filename = "?";
-
+
weston_log("%u: %s (%s%s+0x%x) [%p]\n", i++, filename, procname,
ret == -UNW_ENOMEM ? "..." : "", (int)off, (void *)(pip.start_ip + off));
@@ -3914,6 +3914,9 @@ weston_load_module(const char *name, const char *entrypoint)
char path[PATH_MAX];
void *module, *init;
+ if (name == NULL)
+ return NULL;
+
if (name[0] != '/')
snprintf(path, sizeof path, "%s/%s", MODULEDIR, name);
else
@@ -4125,6 +4128,7 @@ int main(int argc, char *argv[])
char *backend = NULL;
char *option_backend = NULL;
char *shell = NULL;
+ char *option_shell = NULL;
char *modules, *option_modules = NULL;
char *log = NULL;
int32_t idle_time = 300;
@@ -4136,7 +4140,7 @@ int main(int argc, char *argv[])
const struct weston_option core_options[] = {
{ WESTON_OPTION_STRING, "backend", 'B', &option_backend },
- { WESTON_OPTION_STRING, "shell", 0, &shell },
+ { WESTON_OPTION_STRING, "shell", 0, &option_shell },
{ WESTON_OPTION_STRING, "socket", 'S', &socket_name },
{ WESTON_OPTION_INTEGER, "idle-time", 'i', &idle_time },
{ WESTON_OPTION_STRING, "modules", 0, &option_modules },
@@ -4156,7 +4160,7 @@ int main(int argc, char *argv[])
}
weston_log_file_open(log);
-
+
weston_log("%s\n"
STAMP_SPACE "%s\n"
STAMP_SPACE "Bug reports to: %s\n"
@@ -4190,22 +4194,23 @@ int main(int argc, char *argv[])
}
section = weston_config_get_section(config, "core", NULL, NULL);
- weston_config_section_get_string(section, "backend", &backend, NULL);
- if (option_backend) {
- backend = option_backend;
- }
+ if (option_backend)
+ backend = strdup(option_backend);
+ else
+ weston_config_section_get_string(section, "backend", &backend,
+ NULL);
+
if (!backend) {
if (getenv("WAYLAND_DISPLAY"))
- backend = "wayland-backend.so";
+ backend = strdup("wayland-backend.so");
else if (getenv("DISPLAY"))
- backend = "x11-backend.so";
+ backend = strdup("x11-backend.so");
else
- backend = WESTON_NATIVE_BACKEND;
+ backend = strdup(WESTON_NATIVE_BACKEND);
}
- weston_config_section_get_string(section, "modules", &modules, "");
-
backend_init = weston_load_module(backend, "backend_init");
+ free(backend);
if (!backend_init)
exit(EXIT_FAILURE);
@@ -4223,14 +4228,25 @@ int main(int argc, char *argv[])
setenv("WAYLAND_DISPLAY", socket_name, 1);
- if (!shell)
+ if (option_shell)
+ shell = strdup(option_shell);
+ else
weston_config_section_get_string(section, "shell", &shell,
"desktop-shell.so");
- if (load_modules(ec, shell, &argc, argv) < 0)
+
+ if (load_modules(ec, shell, &argc, argv) < 0) {
+ free(shell);
goto out;
+ }
+ free(shell);
- if (load_modules(ec, modules, &argc, argv) < 0)
+ weston_config_section_get_string(section, "modules", &modules, "");
+ if (load_modules(ec, modules, &argc, argv) < 0) {
+ free(modules);
goto out;
+ }
+ free(modules);
+
if (load_modules(ec, option_modules, &argc, argv) < 0)
goto out;