gnome-control-center r8847 - trunk/capplets/display
- From: jensg svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-control-center r8847 - trunk/capplets/display
- Date: Fri, 8 Aug 2008 17:47:05 +0000 (UTC)
Author: jensg
Date: Fri Aug 8 17:47:04 2008
New Revision: 8847
URL: http://svn.gnome.org/viewvc/gnome-control-center?rev=8847&view=rev
Log:
2008-08-08 Jens Granseuer <jensgr gmx net>
* xrandr-capplet.c: (run_application), (main): don't leak the
application or the GladeXML
Modified:
trunk/capplets/display/ChangeLog
trunk/capplets/display/xrandr-capplet.c
Modified: trunk/capplets/display/xrandr-capplet.c
==============================================================================
--- trunk/capplets/display/xrandr-capplet.c (original)
+++ trunk/capplets/display/xrandr-capplet.c Fri Aug 8 17:47:04 2008
@@ -11,7 +11,7 @@
* 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
@@ -41,7 +41,7 @@
GnomeRRScreen *screen;
GnomeRRConfig *current_configuration;
GnomeOutputInfo *current_output;
-
+
GtkWidget *dialog;
GtkListStore *resolution_store;
GtkWidget *resolution_combo;
@@ -51,7 +51,7 @@
GtkWidget *panel_label;
GtkWidget *clone_checkbox;
GtkWidget *show_icon_checkbox;
-
+
GtkWidget *area;
gboolean ignore_gui_changes;
GConfClient *client;
@@ -66,15 +66,15 @@
{
if (!err)
return;
-
+
GtkWidget *dialog = gtk_message_dialog_new (
NULL,
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_WARNING,
GTK_BUTTONS_OK, err->message);
-
+
gtk_window_set_title (GTK_WINDOW (dialog), "");
-
+
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
}
@@ -117,25 +117,25 @@
if (app->current_configuration)
gnome_rr_config_free (app->current_configuration);
-
+
app->current_configuration = current;
#if 0
for (i = 0; app->current_configuration->outputs[i] != NULL; ++i)
{
GnomeOutputInfo *o = app->current_configuration->outputs[i];
-
+
g_print (" output %s %s: %d %d %d %d\n", o->name, o->on? "on" : "off", o->x, o->y, o->width, o->height);
}
#endif
-
+
#if 0
g_print ("sorting\n");
#endif
/* Sort outputs according to X coordinate */
for (i = 0; app->current_configuration->outputs[i] != NULL; ++i)
;
-
+
qsort (app->current_configuration->outputs, i, sizeof (GnomeOutputInfo *),
compare_outputs);
@@ -143,11 +143,11 @@
for (i = 0; app->current_configuration->outputs[i] != NULL; ++i)
{
GnomeOutputInfo *o = app->current_configuration->outputs[i];
-
+
g_print (" output: %d %d %d %d\n", o->x, o->y, o->width, o->height);
}
#endif
-
+
/* Select an output */
best = NULL;
for (i = 0; app->current_configuration->outputs[i] != NULL; ++i)
@@ -224,7 +224,7 @@
gtk_tree_model_get (model, iter, 0, &text, -1);
g_assert (text != NULL);
-
+
if (strcmp (info->text, text) == 0)
{
info->found = TRUE;
@@ -249,7 +249,7 @@
info.text = text;
info.found = FALSE;
-
+
gtk_tree_model_foreach (model, foreach, &info);
if (!info.found)
@@ -283,7 +283,7 @@
info.text = text;
info.found = FALSE;
-
+
gtk_tree_model_foreach (model, foreach, &info);
if (!info.found)
@@ -342,7 +342,7 @@
{
gboolean valid = TRUE;
int j;
-
+
for (j = 0; config->outputs[j] != NULL; ++j)
{
if (config->outputs[j]->connected)
@@ -363,7 +363,7 @@
}
g_ptr_array_add (result, NULL);
-
+
return (GnomeRRMode **)g_ptr_array_free (result, FALSE);
}
@@ -380,13 +380,13 @@
{
if (!app->current_output)
return NULL;
-
+
output = gnome_rr_screen_get_output_by_name (
app->screen, app->current_output->name);
-
+
if (!output)
return NULL;
-
+
return gnome_rr_output_list_modes (output);
}
}
@@ -408,22 +408,22 @@
const char *selection;
GnomeRRRotation current;
int i;
-
+
clear_combo (app->rotation_combo);
gtk_widget_set_sensitive (
app->rotation_combo, app->current_output && app->current_output->on);
-
+
if (!app->current_output)
return;
-
+
current = app->current_output->rotation;
selection = NULL;
for (i = 0; i < G_N_ELEMENTS (rotations); ++i)
{
const RotationInfo *info = &(rotations[i]);
-
+
app->current_output->rotation = info->rotation;
if (gnome_rr_config_applicable (app->current_configuration, app->screen))
@@ -436,7 +436,7 @@
}
app->current_output->rotation = current;
-
+
if (!(selection && combo_select (app->rotation_combo, selection)))
combo_select (app->rotation_combo, N_("Normal"));
}
@@ -458,10 +458,10 @@
if (!(modes = get_current_modes (app)))
return;
-
+
rates = g_hash_table_new_full (
g_str_hash, g_str_equal, (GFreeFunc)g_free, NULL);
-
+
best = -1;
for (i = 0; modes[i] != NULL; ++i)
{
@@ -492,14 +492,14 @@
count_active_outputs (App *app)
{
int i, count = 0;
-
+
for (i = 0; app->current_configuration->outputs[i] != NULL; ++i)
{
GnomeOutputInfo *output = app->current_configuration->outputs[i];
if (output->on)
count++;
}
-
+
return count;
}
@@ -523,7 +523,7 @@
const char *current;
clear_combo (app->resolution_combo);
-
+
if (!(modes = get_current_modes (app)))
return;
@@ -535,7 +535,7 @@
width = gnome_rr_mode_get_width (modes[i]);
height = gnome_rr_mode_get_height (modes[i]);
-
+
add_key (app->resolution_combo,
idle_free (g_strdup_printf (_("%d x %d"), width, height)),
width, height, 0, -1);
@@ -560,7 +560,7 @@
app->current_output->width,
app->current_output->height));
}
-
+
if (!combo_select (app->resolution_combo, current))
{
@@ -579,7 +579,7 @@
* just assert if that happens
*/
g_assert (app->ignore_gui_changes == FALSE);
-
+
app->ignore_gui_changes = TRUE;
sensitive = app->current_output? TRUE : FALSE;
@@ -587,7 +587,7 @@
#if 0
g_print ("rebuild gui, is on: %d\n", app->current_output->on);
#endif
-
+
rebuild_resolution_combo (app);
rebuild_rate_combo (app);
rebuild_rotation_combo (app);
@@ -629,7 +629,7 @@
if (!rot)
rot = (GnomeRRRotation *)&dummy;
-
+
model = gtk_combo_box_get_model (box);
gtk_tree_model_get (model, &iter,
1, width,
@@ -692,7 +692,7 @@
else
app->current_output->on = TRUE;
}
-
+
#if 0
if (app->current_configuration)
{
@@ -700,20 +700,20 @@
for (i = 0; app->current_configuration->outputs[i] != NULL; ++i)
{
GnomeOutputInfo *output = app->current_configuration->outputs[i];
-
+
if (output->connected)
{
output->x = x;
-
+
x += output->width;
}
}
}
#endif
-
+
rebuild_rate_combo (app);
rebuild_rotation_combo (app);
-
+
foo_scroll_area_invalidate (FOO_SCROLL_AREA (app->area));
}
@@ -738,7 +738,7 @@
}
}
}
-
+
rebuild_gui (app);
}
@@ -780,7 +780,7 @@
if (output->connected)
{
int w, h;
-
+
result = g_list_prepend (result, output);
get_geometry (output, &w, &h);
@@ -812,11 +812,11 @@
int n_monitors;
GdkRectangle viewport;
GList *connected_outputs;
-
+
foo_scroll_area_get_viewport (FOO_SCROLL_AREA (app->area), &viewport);
connected_outputs = list_connected_outputs (app, &total_w, &total_h);
-
+
n_monitors = g_list_length (connected_outputs);
g_list_free (connected_outputs);
@@ -838,14 +838,14 @@
{
Edge *snapper; /* Edge that should be snapped */
Edge *snappee;
- int dy, dx;
+ int dy, dx;
} Snap;
static void
add_edge (GnomeOutputInfo *output, int x1, int y1, int x2, int y2, GArray *edges)
{
Edge e;
-
+
e.x1 = x1;
e.x2 = x2;
e.y1 = y1;
@@ -859,11 +859,11 @@
list_edges_for_output (GnomeOutputInfo *output, GArray *edges)
{
int x, y, w, h;
-
+
x = output->x;
y = output->y;
get_geometry (output, &w, &h);
-
+
/* Top, Bottom, Left, Right */
add_edge (output, x, y, x + w, y, edges);
add_edge (output, x, y + h, x + w, y + h, edges);
@@ -905,7 +905,7 @@
{
if (snapper->x1 != snapper->x2 || snappee->x1 != snappee->x2)
return FALSE;
-
+
return overlap (snapper->y1, snapper->y2, snappee->y1, snappee->y2);
}
@@ -923,7 +923,7 @@
snap.snapper = snapper;
snap.snappee = snappee;
-
+
if (horizontal_overlap (snapper, snappee))
{
snap.dx = 0;
@@ -943,9 +943,9 @@
/* 1->1 */
snap.dx = snappee->x1 - snapper->x1;
snap.dy = snappee->y1 - snapper->y1;
-
+
add_snap (snaps, snap);
-
+
/* 1->2 */
snap.dx = snappee->x2 - snapper->x1;
snap.dy = snappee->y2 - snapper->y1;
@@ -977,9 +977,9 @@
if (output_edge->output == output)
{
int j;
-
+
for (j = 0; j < edges->len; ++j)
- {
+ {
Edge *edge = &(g_array_index (edges, Edge, j));
if (edge->output != output)
@@ -1002,7 +1002,7 @@
{
if (x == e->x1 && x == e->x2 && y >= e->y1 && y <= e->y2)
return TRUE;
-
+
if (y == e->y1 && y == e->y2 && x >= e->x1 && x <= e->x2)
return TRUE;
@@ -1086,7 +1086,7 @@
if (other != output && other->connected)
{
GdkRectangle other_rect;
-
+
get_output_rect (other, &other_rect);
if (gdk_rectangle_intersect (&output_rect, &other_rect, NULL))
return TRUE;
@@ -1181,7 +1181,7 @@
if (event->type == FOO_BUTTON_PRESS)
{
GrabInfo *info;
-
+
app->current_output = output;
rebuild_gui (app);
@@ -1189,16 +1189,16 @@
if (!app->current_configuration->clone && get_n_connected (app) > 1)
{
foo_scroll_area_begin_grab (area, on_output_event, data);
-
+
info = g_new0 (GrabInfo, 1);
info->grab_x = event->x;
info->grab_y = event->y;
info->output_x = output->x;
info->output_y = output->y;
-
+
output->user_data = info;
}
-
+
foo_scroll_area_invalidate (area);
}
else
@@ -1216,14 +1216,14 @@
old_y = output->y;
new_x = info->output_x + (event->x - info->grab_x) / scale;
new_y = info->output_y + (event->y - info->grab_y) / scale;
-
+
output->x = new_x;
output->y = new_y;
edges = g_array_new (TRUE, TRUE, sizeof (Edge));
snaps = g_array_new (TRUE, TRUE, sizeof (Snap));
new_edges = g_array_new (TRUE, TRUE, sizeof (Edge));
-
+
list_edges (app->current_configuration, edges);
list_snaps (output, edges, snaps);
@@ -1231,7 +1231,7 @@
output->x = info->output_x;
output->y = info->output_y;
-
+
for (i = 0; i < snaps->len; ++i)
{
Snap *snap = &(g_array_index (snaps, Snap, i));
@@ -1242,7 +1242,7 @@
g_array_set_size (new_edges, 0);
list_edges (app->current_configuration, new_edges);
-
+
if (gnome_rr_config_is_aligned (app->current_configuration, new_edges))
{
g_array_free (new_edges, TRUE);
@@ -1258,7 +1258,7 @@
g_array_free (new_edges, TRUE);
g_array_free (snaps, TRUE);
g_array_free (edges, TRUE);
-
+
if (event->type == FOO_BUTTON_RELEASE)
{
foo_scroll_area_end_grab (area);
@@ -1283,7 +1283,7 @@
gpointer data)
{
App *app = g_object_get_data (G_OBJECT (area), "app");
-
+
if (event->type == FOO_BUTTON_PRESS)
{
app->current_output = NULL;
@@ -1300,7 +1300,7 @@
GnomeOutputInfo *output)
{
const char *text;
-
+
if (app->current_configuration->clone)
text = _("Cloned Output");
else
@@ -1320,7 +1320,7 @@
GdkRectangle viewport;
foo_scroll_area_get_viewport (area, &viewport);
-
+
cairo_set_source_rgba (cr, BACKGROUND_FILL_RGBA);
cairo_rectangle (cr,
@@ -1345,7 +1345,7 @@
double scale = compute_scale (app);
double x, y;
int total_w, total_h;
- GList *connected_outputs = list_connected_outputs (app, &total_w, &total_h);
+ GList *connected_outputs = list_connected_outputs (app, &total_w, &total_h);
GnomeOutputInfo *output = g_list_nth (connected_outputs, i)->data;
PangoLayout *layout = get_display_name (app, output);
PangoRectangle extent;
@@ -1353,11 +1353,11 @@
double angle;
cairo_save (cr);
-
+
foo_scroll_area_get_viewport (FOO_SCROLL_AREA (app->area), &viewport);
-
+
get_geometry (output, &w, &h);
-
+
#if 0
g_print ("%s (%p) geometry %d %d %d\n", output->name, output,
w, h, output->rate);
@@ -1365,7 +1365,7 @@
viewport.height -= 2 * MARGIN;
viewport.width -= 2 * MARGIN;
-
+
x = output->x * scale + MARGIN + (viewport.width - total_w * scale) / 2.0;
y = output->y * scale + MARGIN + (viewport.height - total_h * scale) / 2.0;
@@ -1373,7 +1373,7 @@
g_print ("scaled: %f %f\n", x, y);
g_print ("scale: %f\n", scale);
-
+
g_print ("%f %f %f %f\n", x, y, w * scale + 0.5, h * scale + 0.5);
#endif
@@ -1382,7 +1382,7 @@
cairo_translate (cr,
x + (w * scale + 0.5) / 2,
y + (h * scale + 0.5) / 2);
-
+
if (output->rotation & GNOME_RR_ROTATION_0)
{
angle = 0;
@@ -1405,41 +1405,41 @@
}
cairo_rotate (cr, angle);
-
+
if (output->rotation & GNOME_RR_REFLECT_X)
cairo_scale (cr, -1, 1);
-
+
if (output->rotation & GNOME_RR_REFLECT_Y)
cairo_scale (cr, 1, -1);
-
- cairo_translate (cr,
+
+ cairo_translate (cr,
- x - (w * scale + 0.5) / 2,
- y - (h * scale + 0.5) / 2);
-
+
cairo_rectangle (cr, x, y, w * scale + 0.5, h * scale + 0.5);
cairo_clip_preserve (cr);
-
+
if (output->on)
cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 1.0);
else
cairo_set_source_rgba (cr, 0.2, 0.2, 0.2, 1.0);
-
+
foo_scroll_area_add_input_from_fill (FOO_SCROLL_AREA (app->area),
cr, on_output_event, output);
cairo_fill (cr);
-
+
if (output == app->current_output)
{
cairo_rectangle (cr, x + 2, y + 2, w * scale + 0.5 - 4, h * scale + 0.5 - 4);
-
+
cairo_set_line_width (cr, 4);
cairo_set_source_rgba (cr, 0.33, 0.43, 0.57, 1.0);
cairo_stroke (cr);
}
-
+
cairo_rectangle (cr, x + 0.5, y + 0.5, w * scale + 0.5 - 1, h * scale + 0.5 - 1);
-
+
cairo_set_line_width (cr, 1);
cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0);
@@ -1447,23 +1447,23 @@
cairo_set_line_width (cr, 2);
layout_set_font (layout, "Sans Bold 12");
-
+
pango_layout_get_pixel_extents (layout, NULL, &extent);
extent.x = x + ((w * scale + 0.5) - extent.width) / 2;
extent.y = y + ((h * scale + 0.5) - extent.height) / 2;
cairo_move_to (cr, extent.x, extent.y);
-
+
if (output->on)
cairo_set_source_rgb (cr, 0.2, 0.2, 0.8);
else
cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
-
+
pango_cairo_show_layout (cr, layout);
cairo_restore (cr);
-
+
g_object_unref (layout);
}
@@ -1480,17 +1480,17 @@
GList *list;
paint_background (area, cr);
-
+
if (!app->current_configuration)
return;
-
+
scale = compute_scale (app);
connected_outputs = list_connected_outputs (app, NULL, NULL);
-
+
#if 0
g_print ("scale: %f\n", scale);
#endif
-
+
for (list = connected_outputs; list != NULL; list = list->next)
{
paint_output (app, cr, g_list_position (connected_outputs, list));
@@ -1507,16 +1507,16 @@
GtkListStore *store = gtk_list_store_new (
6,
G_TYPE_STRING, /* Text */
- G_TYPE_INT, /* Width */
+ G_TYPE_INT, /* Width */
G_TYPE_INT, /* Height */
G_TYPE_INT, /* Frequency */
G_TYPE_INT, /* Width * Height */
G_TYPE_INT); /* Rotation */
-
+
GtkCellRenderer *cell;
gtk_cell_layout_clear (GTK_CELL_LAYOUT (widget));
-
+
gtk_combo_box_set_model (box, GTK_TREE_MODEL (store));
cell = gtk_cell_renderer_text_new ();
@@ -1611,7 +1611,7 @@
check_required_virtual_size (app);
foo_scroll_area_invalidate (FOO_SCROLL_AREA (app->area));
-
+
if (gnome_rr_config_save (app->current_configuration, &err))
{
XEvent message;
@@ -1668,7 +1668,7 @@
{
GtkToggleButton *tb = GTK_TOGGLE_BUTTON (widget);
App *app = data;
-
+
gconf_client_set_bool (app->client, SHOW_ICON_KEY,
gtk_toggle_button_get_active (tb), NULL);
}
@@ -1723,23 +1723,23 @@
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (app->show_icon_checkbox),
gconf_client_get_bool (app->client, SHOW_ICON_KEY, NULL));
-
+
g_signal_connect (app->show_icon_checkbox, "toggled", G_CALLBACK (on_show_icon_toggled), app);
-
+
app->panel_checkbox = glade_xml_get_widget (xml, "panel_checkbox");
app->panel_label = glade_xml_get_widget (xml, "panel_label");
make_text_combo (app->resolution_combo, 4);
make_text_combo (app->refresh_combo, 3);
make_text_combo (app->rotation_combo, -1);
-
+
g_assert (app->panel_checkbox);
-
+
/* Scroll Area */
app->area = (GtkWidget *)foo_scroll_area_new ();
g_object_set_data (G_OBJECT (app->area), "app", app);
-
+
/* FIXME: this should be computed dynamically */
foo_scroll_area_set_min_size (FOO_SCROLL_AREA (app->area), -1, 200);
gtk_widget_show (app->area);
@@ -1757,7 +1757,8 @@
gtk_widget_hide (app->panel_checkbox);
gtk_widget_hide (app->panel_label);
-
+ g_object_unref (xml);
+
restart:
switch (gtk_dialog_run (GTK_DIALOG (app->dialog)))
{
@@ -1786,16 +1787,18 @@
main (int argc, char **argv)
{
App *app;
-
+
bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
-
+
gtk_init (&argc, &argv);
app = g_new0 (App, 1);
run_application (app);
-
+
+ g_free (app);
+
return 0;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]