Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
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);
    }
}