static void nemo_blank_desktop_window_constructed (GObject *obj) { AtkObject *accessible; NemoBlankDesktopWindow *window = NEMO_BLANK_DESKTOP_WINDOW (obj); G_OBJECT_CLASS (nemo_blank_desktop_window_parent_class)->constructed (obj); /* Set the accessible name so that it doesn't inherit the cryptic desktop URI. */ accessible = gtk_widget_get_accessible (GTK_WIDGET (window)); if (accessible) { atk_object_set_name (accessible, _("Desktop")); } GdkRectangle rect; nemo_desktop_utils_get_monitor_geometry (window->details->monitor, &rect); DEBUG ("NemoBlankDesktopWindow monitor:%d: x:%d, y:%d, w:%d, h:%d", window->details->monitor, rect.x, rect.y, rect.width, rect.height); gtk_window_move (GTK_WINDOW (window), rect.x, rect.y); gtk_widget_set_size_request (GTK_WIDGET (window), rect.width, rect.height); gtk_window_set_resizable (GTK_WINDOW (window), FALSE); gtk_widget_show_all (GTK_WIDGET (window)); g_signal_connect (GTK_WIDGET (window), "button-press-event", G_CALLBACK (on_button_press), window); g_signal_connect (GTK_WIDGET (window), "popup-menu", G_CALLBACK (on_popup_menu), window); }
void nemo_desktop_manager_get_margins (NemoDesktopManager *manager, gint monitor, gint *left, gint *right, gint *top, gint *bottom) { FETCH_PRIV (manager); GdkRectangle work_rect, geometry; /* We don't use margins if we have reliable work area * info (e.g. having an active Cinnamon session) */ if (priv->proxy_owned && !priv->other_desktop) { *left = *right = *top = *bottom = 0; return; } /* _NET_WORKAREA only applies to the primary monitor - use it to adjust container margins on the primary icon container only. For any others, add a sane amount of padding for any likely chrome. */ if (monitor != nemo_desktop_utils_get_primary_monitor ()) { *left = *right = *top = *bottom = 25; return; } nemo_desktop_utils_get_monitor_geometry (monitor, &geometry); nemo_desktop_utils_get_monitor_work_rect (monitor, &work_rect); *left = work_rect.x - geometry.x; *right = (geometry.x + geometry.width) - (work_rect.x + work_rect.width); *top = work_rect.y - geometry.y; *bottom = (geometry.y + geometry.height) - (work_rect.y + work_rect.height); }
static void get_window_rect_for_monitor (NemoDesktopManager *manager, gint monitor, GdkRectangle *rect) { FETCH_PRIV (manager); GVariant *out_rect_var; GdkRectangle out_rect; gsize n_elem; gint scale_factor; GError *error; error = NULL; out_rect_var = NULL; if (priv->current_run_state == RUN_STATE_FALLBACK) { DEBUG ("Currently in fallback mode, retrieving n_monitors via GdkScreen"); nemo_desktop_utils_get_monitor_geometry (monitor, &out_rect); goto out; } if (!nemo_cinnamon_call_get_monitor_work_rect_sync (priv->proxy, monitor, &out_rect_var, NULL, &error)) { DEBUG ("Attempting proxy call 'GetMonitorWorkRect' failed, retrieving n_monitors via GdkScreen: %s", error ? error->message : NULL); g_clear_error (&error); nemo_desktop_utils_get_monitor_geometry (monitor, &out_rect); goto out; } out_rect = *( (GdkRectangle *) g_variant_get_fixed_array (out_rect_var, &n_elem, sizeof(gint)) ); /* GdkScreen sizes are scaled for hidpi already. But if we've gotten this far, we're using * Cinnamon-provided numbers, which aren't scaled. */ scale_factor = nemo_desktop_utils_get_scale_factor (); out_rect.x /= scale_factor; out_rect.y /= scale_factor; out_rect.width /= scale_factor; out_rect.height /= scale_factor; out: rect->x = out_rect.x; rect->y = out_rect.y; rect->width = out_rect.width; rect->height = out_rect.height; if (out_rect_var != NULL) { g_variant_unref (out_rect_var); } }