Commit c663ee33 authored by Victor Ananjesky's avatar Victor Ananjesky

rewrite geometry parsing

parent a731d3f1
......@@ -591,47 +591,76 @@ create_dialog (void)
/* show widgets */
gtk_widget_show_all (vbox);
/* parse geometry or move window, if given. must be after showing widget */
if (!options.data.maximized && !options.data.fullscreen)
{
gtk_widget_realize (dlg);
/* parse geometry string */
if (options.data.geometry)
{
gtk_window_parse_geometry (GTK_WINDOW (dlg), options.data.geometry);
gtk_widget_show (dlg);
}
else
{
/* if (options.data.width <= 0) */
/* options.data.width = gdk_window_get_width (gtk_widget_get_window (dlg)); */
/* if (options.data.height <= 0) */
/* options.data.height = gdk_window_get_height (gtk_widget_get_window (dlg)); */
/* gtk_window_resize (GTK_WINDOW (dlg), options.data.width, options.data.height); */
gtk_widget_set_size_request (dlg, options.data.width, options.data.height);
gtk_window_set_resizable (GTK_WINDOW (dlg), !options.data.fixed);
gtk_widget_show_all (dlg);
if (options.data.use_posx || options.data.use_posy)
gchar **geom;
geom = g_new0 (gchar *, 5);
if (*options.data.geometry == '+' || *options.data.geometry == '-')
{
gint ww, wh;
gtk_window_get_size (GTK_WINDOW (dlg), &ww, &wh);
/* place window to specified coordinates */
if (!options.data.use_posx)
gtk_window_get_position (GTK_WINDOW (dlg), &options.data.posx, NULL);
if (!options.data.use_posy)
gtk_window_get_position (GTK_WINDOW (dlg), NULL, &options.data.posy);
if (options.data.posx < 0)
geom = g_strsplit_set (options.data.geometry, "+-", 3);
if (geom[1])
{
gint sw = gdk_screen_get_width (gdk_screen_get_default ());
options.data.posx = sw - ww + options.data.posx;
options.data.use_posx = TRUE;
options.data.posx = atoi (geom[1]);
if (geom[2])
{
options.data.use_posy = TRUE;
options.data.posy = atoi (geom[2]);
}
}
if (options.data.posy < 0)
}
else
{
geom = g_strsplit_set (options.data.geometry, "x+-", 4);
if (geom[0])
{
gint sh = gdk_screen_get_height (gdk_screen_get_default ());
options.data.posy = sh - wh + options.data.posy;
options.data.width = atoi (geom[0]);
if (geom[1])
{
options.data.height = atoi (geom[1]);
if (geom[2])
{
options.data.use_posx = TRUE;
options.data.posx = atoi (geom[2]);
if (geom[3])
{
options.data.use_posy = TRUE;
options.data.posy = atoi (geom[3]);
}
}
}
}
gtk_window_move (GTK_WINDOW (dlg), options.data.posx, options.data.posy);
}
g_strfreev (geom);
}
gtk_widget_set_size_request (dlg, options.data.width, options.data.height);
gtk_window_set_resizable (GTK_WINDOW (dlg), !options.data.fixed);
gtk_widget_show_all (dlg);
if (options.data.use_posx || options.data.use_posy)
{
gint ww, wh, sw, sh;
gtk_window_get_size (GTK_WINDOW (dlg), &ww, &wh);
gdk_window_get_geometry (gdk_get_default_root_window (), NULL, NULL, &sw, &sh);
/* place window to specified coordinates */
if (!options.data.use_posx)
gtk_window_get_position (GTK_WINDOW (dlg), &options.data.posx, NULL);
if (!options.data.use_posy)
gtk_window_get_position (GTK_WINDOW (dlg), NULL, &options.data.posy);
if (options.data.posx < 0)
options.data.posx = sw - ww + options.data.posx;
if (options.data.posy < 0)
options.data.posy = sh - wh + options.data.posy;
gtk_window_move (GTK_WINDOW (dlg), options.data.posx, options.data.posy);
}
}
else
......
......@@ -268,20 +268,11 @@ yad_print_run (void)
gtk_window_set_skip_pager_hint (GTK_WINDOW (dlg), options.data.skip_taskbar);
/* set window size and position */
if (!options.data.geometry)
{
gtk_window_set_default_size (GTK_WINDOW (dlg), options.data.width, options.data.height);
if (options.data.center)
gtk_window_set_position (GTK_WINDOW (dlg), GTK_WIN_POS_CENTER);
else if (options.data.mouse)
gtk_window_set_position (GTK_WINDOW (dlg), GTK_WIN_POS_MOUSE);
}
else
{
/* parse geometry, if given. must be after showing widget */
gtk_widget_realize (dlg);
gtk_window_parse_geometry (GTK_WINDOW (dlg), options.data.geometry);
}
gtk_window_set_default_size (GTK_WINDOW (dlg), options.data.width, options.data.height);
if (options.data.center)
gtk_window_set_position (GTK_WINDOW (dlg), GTK_WIN_POS_CENTER);
else if (options.data.mouse)
gtk_window_set_position (GTK_WINDOW (dlg), GTK_WIN_POS_MOUSE);
/* create yad's top box */
if (options.data.dialog_text || options.data.dialog_image)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment