Commit c663ee33 authored by Victor Ananjesky's avatar Victor Ananjesky

rewrite geometry parsing

parent a731d3f1
...@@ -591,49 +591,78 @@ create_dialog (void) ...@@ -591,49 +591,78 @@ create_dialog (void)
/* show widgets */ /* show widgets */
gtk_widget_show_all (vbox); gtk_widget_show_all (vbox);
/* parse geometry or move window, if given. must be after showing widget */ /* parse geometry or move window, if given. must be after showing widget */
if (!options.data.maximized && !options.data.fullscreen) if (!options.data.maximized && !options.data.fullscreen)
{ {
gtk_widget_realize (dlg); gtk_widget_realize (dlg);
/* parse geometry string */
if (options.data.geometry) if (options.data.geometry)
{ {
gtk_window_parse_geometry (GTK_WINDOW (dlg), options.data.geometry); gchar **geom;
gtk_widget_show (dlg);
geom = g_new0 (gchar *, 5);
if (*options.data.geometry == '+' || *options.data.geometry == '-')
{
geom = g_strsplit_set (options.data.geometry, "+-", 3);
if (geom[1])
{
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]);
}
}
} }
else else
{ {
/* if (options.data.width <= 0) */ geom = g_strsplit_set (options.data.geometry, "x+-", 4);
/* options.data.width = gdk_window_get_width (gtk_widget_get_window (dlg)); */ if (geom[0])
/* if (options.data.height <= 0) */ {
/* options.data.height = gdk_window_get_height (gtk_widget_get_window (dlg)); */ options.data.width = atoi (geom[0]);
/* gtk_window_resize (GTK_WINDOW (dlg), options.data.width, options.data.height); */ 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]);
}
}
}
}
}
g_strfreev (geom);
}
gtk_widget_set_size_request (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_window_set_resizable (GTK_WINDOW (dlg), !options.data.fixed);
gtk_widget_show_all (dlg); gtk_widget_show_all (dlg);
if (options.data.use_posx || options.data.use_posy) if (options.data.use_posx || options.data.use_posy)
{ {
gint ww, wh; gint ww, wh, sw, sh;
gtk_window_get_size (GTK_WINDOW (dlg), &ww, &wh); 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 */ /* place window to specified coordinates */
if (!options.data.use_posx) if (!options.data.use_posx)
gtk_window_get_position (GTK_WINDOW (dlg), &options.data.posx, NULL); gtk_window_get_position (GTK_WINDOW (dlg), &options.data.posx, NULL);
if (!options.data.use_posy) if (!options.data.use_posy)
gtk_window_get_position (GTK_WINDOW (dlg), NULL, &options.data.posy); gtk_window_get_position (GTK_WINDOW (dlg), NULL, &options.data.posy);
if (options.data.posx < 0) if (options.data.posx < 0)
{
gint sw = gdk_screen_get_width (gdk_screen_get_default ());
options.data.posx = sw - ww + options.data.posx; options.data.posx = sw - ww + options.data.posx;
}
if (options.data.posy < 0) if (options.data.posy < 0)
{
gint sh = gdk_screen_get_height (gdk_screen_get_default ());
options.data.posy = sh - wh + options.data.posy; options.data.posy = sh - wh + options.data.posy;
}
gtk_window_move (GTK_WINDOW (dlg), options.data.posx, options.data.posy); gtk_window_move (GTK_WINDOW (dlg), options.data.posx, options.data.posy);
} }
} }
}
else else
{ {
gtk_widget_show (dlg); gtk_widget_show (dlg);
......
...@@ -268,20 +268,11 @@ yad_print_run (void) ...@@ -268,20 +268,11 @@ yad_print_run (void)
gtk_window_set_skip_pager_hint (GTK_WINDOW (dlg), options.data.skip_taskbar); gtk_window_set_skip_pager_hint (GTK_WINDOW (dlg), options.data.skip_taskbar);
/* set window size and position */ /* set window size and position */
if (!options.data.geometry)
{
gtk_window_set_default_size (GTK_WINDOW (dlg), options.data.width, options.data.height); gtk_window_set_default_size (GTK_WINDOW (dlg), options.data.width, options.data.height);
if (options.data.center) if (options.data.center)
gtk_window_set_position (GTK_WINDOW (dlg), GTK_WIN_POS_CENTER); gtk_window_set_position (GTK_WINDOW (dlg), GTK_WIN_POS_CENTER);
else if (options.data.mouse) else if (options.data.mouse)
gtk_window_set_position (GTK_WINDOW (dlg), GTK_WIN_POS_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);
}
/* create yad's top box */ /* create yad's top box */
if (options.data.dialog_text || options.data.dialog_image) 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