mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-04-22 05:25:03 -05:00
Minor improvements to subsidiary window placement; with any luck the
Event Log should go off the side of the screen rather less often now. [originally from svn r3088]
This commit is contained in:
parent
b49980b953
commit
406d2d8a32
@ -677,6 +677,35 @@ static void errmsg_button_clicked(GtkButton *button, gpointer data)
|
|||||||
gtk_widget_destroy(GTK_WIDGET(data));
|
gtk_widget_destroy(GTK_WIDGET(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void set_transient_window_pos(GtkWidget *parent, GtkWidget *child)
|
||||||
|
{
|
||||||
|
gint x, y, w, h, dx, dy;
|
||||||
|
GtkRequisition req;
|
||||||
|
gtk_window_set_position(GTK_WINDOW(child), GTK_WIN_POS_NONE);
|
||||||
|
gtk_widget_size_request(GTK_WIDGET(child), &req);
|
||||||
|
|
||||||
|
gdk_window_get_origin(GTK_WIDGET(parent)->window, &x, &y);
|
||||||
|
gdk_window_get_size(GTK_WIDGET(parent)->window, &w, &h);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* One corner of the transient will be offset inwards, by 1/4
|
||||||
|
* of the parent window's size, from the corresponding corner
|
||||||
|
* of the parent window. The corner will be chosen so as to
|
||||||
|
* place the transient closer to the centre of the screen; this
|
||||||
|
* should avoid transients going off the edge of the screen on
|
||||||
|
* a regular basis.
|
||||||
|
*/
|
||||||
|
if (x + w/2 < gdk_screen_width() / 2)
|
||||||
|
dx = x + w/4; /* work from left edges */
|
||||||
|
else
|
||||||
|
dx = x + 3*w/4 - req.width; /* work from right edges */
|
||||||
|
if (y + h/2 < gdk_screen_height() / 2)
|
||||||
|
dy = y + h/4; /* work from top edges */
|
||||||
|
else
|
||||||
|
dy = y + 3*h/4 - req.height; /* work from bottom edges */
|
||||||
|
gtk_widget_set_uposition(GTK_WIDGET(child), dx, dy);
|
||||||
|
}
|
||||||
|
|
||||||
void dlg_error_msg(void *dlg, char *msg)
|
void dlg_error_msg(void *dlg, char *msg)
|
||||||
{
|
{
|
||||||
struct dlgparam *dp = (struct dlgparam *)dlg;
|
struct dlgparam *dp = (struct dlgparam *)dlg;
|
||||||
@ -705,15 +734,7 @@ void dlg_error_msg(void *dlg, char *msg)
|
|||||||
GTK_SIGNAL_FUNC(window_destroy), NULL);
|
GTK_SIGNAL_FUNC(window_destroy), NULL);
|
||||||
gtk_window_set_modal(GTK_WINDOW(window), TRUE);
|
gtk_window_set_modal(GTK_WINDOW(window), TRUE);
|
||||||
gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(dp->window));
|
gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(dp->window));
|
||||||
{
|
set_transient_window_pos(dp->window, window);
|
||||||
gint x, y, w, h, dx, dy;
|
|
||||||
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_NONE);
|
|
||||||
gdk_window_get_origin(GTK_WIDGET(dp->window)->window, &x, &y);
|
|
||||||
gdk_window_get_size(GTK_WIDGET(dp->window)->window, &w, &h);
|
|
||||||
dx = x + w/4;
|
|
||||||
dy = y + h/4;
|
|
||||||
gtk_widget_set_uposition(GTK_WIDGET(window), dx, dy);
|
|
||||||
}
|
|
||||||
gtk_widget_show(window);
|
gtk_widget_show(window);
|
||||||
gtk_main();
|
gtk_main();
|
||||||
}
|
}
|
||||||
@ -1940,11 +1961,12 @@ int do_config_box(const char *title, Config *cfg)
|
|||||||
scs.sc[index].action = SHORTCUT_EMPTY;
|
scs.sc[index].action = SHORTCUT_EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window = gtk_dialog_new();
|
||||||
|
|
||||||
ctrlbox = ctrl_new_box();
|
ctrlbox = ctrl_new_box();
|
||||||
setup_config_box(ctrlbox, &sl, FALSE, 0);
|
setup_config_box(ctrlbox, &sl, FALSE, 0);
|
||||||
unix_setup_config_box(ctrlbox, FALSE);
|
unix_setup_config_box(ctrlbox, FALSE, window);
|
||||||
|
|
||||||
window = gtk_dialog_new();
|
|
||||||
gtk_window_set_title(GTK_WINDOW(window), title);
|
gtk_window_set_title(GTK_WINDOW(window), title);
|
||||||
hbox = gtk_hbox_new(FALSE, 4);
|
hbox = gtk_hbox_new(FALSE, 4);
|
||||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox), hbox, TRUE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox), hbox, TRUE, TRUE, 0);
|
||||||
@ -2218,13 +2240,7 @@ int messagebox(GtkWidget *parentwin, char *title, char *msg, int minwid, ...)
|
|||||||
|
|
||||||
gtk_window_set_modal(GTK_WINDOW(window), TRUE);
|
gtk_window_set_modal(GTK_WINDOW(window), TRUE);
|
||||||
if (parentwin) {
|
if (parentwin) {
|
||||||
gint x, y, w, h, dx, dy;
|
set_transient_window_pos(parentwin, window);
|
||||||
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_NONE);
|
|
||||||
gdk_window_get_origin(parentwin->window, &x, &y);
|
|
||||||
gdk_window_get_size(parentwin->window, &w, &h);
|
|
||||||
dx = x + w/4;
|
|
||||||
dy = y + h/4;
|
|
||||||
gtk_widget_set_uposition(GTK_WIDGET(window), dx, dy);
|
|
||||||
gtk_window_set_transient_for(GTK_WINDOW(window),
|
gtk_window_set_transient_for(GTK_WINDOW(window),
|
||||||
GTK_WINDOW(parentwin));
|
GTK_WINDOW(parentwin));
|
||||||
} else
|
} else
|
||||||
@ -2419,7 +2435,7 @@ static void licence_clicked(GtkButton *button, gpointer data)
|
|||||||
sfree(title);
|
sfree(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
void about_box(void)
|
void about_box(void *window)
|
||||||
{
|
{
|
||||||
GtkWidget *w;
|
GtkWidget *w;
|
||||||
char *title;
|
char *title;
|
||||||
@ -2467,6 +2483,7 @@ void about_box(void)
|
|||||||
w, FALSE, FALSE, 5);
|
w, FALSE, FALSE, 5);
|
||||||
gtk_widget_show(w);
|
gtk_widget_show(w);
|
||||||
|
|
||||||
|
set_transient_window_pos(GTK_WIDGET(window), aboutbox);
|
||||||
gtk_widget_show(aboutbox);
|
gtk_widget_show(aboutbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2582,13 +2599,7 @@ void showeventlog(void *estuff, void *parentwin)
|
|||||||
dlg_refresh(NULL, &es->dp);
|
dlg_refresh(NULL, &es->dp);
|
||||||
|
|
||||||
if (parent) {
|
if (parent) {
|
||||||
gint x, y, w, h, dx, dy;
|
set_transient_window_pos(parent, window);
|
||||||
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_NONE);
|
|
||||||
gdk_window_get_origin(parent->window, &x, &y);
|
|
||||||
gdk_window_get_size(parent->window, &w, &h);
|
|
||||||
dx = x + w/4;
|
|
||||||
dy = y + h/4;
|
|
||||||
gtk_widget_set_uposition(GTK_WIDGET(window), dx, dy);
|
|
||||||
gtk_window_set_transient_for(GTK_WINDOW(window),
|
gtk_window_set_transient_for(GTK_WINDOW(window),
|
||||||
GTK_WINDOW(parent));
|
GTK_WINDOW(parent));
|
||||||
} else
|
} else
|
||||||
|
@ -2314,8 +2314,8 @@ void special_menuitem(GtkMenuItem *item, gpointer data)
|
|||||||
|
|
||||||
void about_menuitem(GtkMenuItem *item, gpointer data)
|
void about_menuitem(GtkMenuItem *item, gpointer data)
|
||||||
{
|
{
|
||||||
/* struct gui_data *inst = (struct gui_data *)data; */
|
struct gui_data *inst = (struct gui_data *)data;
|
||||||
about_box();
|
about_box(inst->window);
|
||||||
}
|
}
|
||||||
|
|
||||||
void event_log_menuitem(GtkMenuItem *item, gpointer data)
|
void event_log_menuitem(GtkMenuItem *item, gpointer data)
|
||||||
|
@ -60,7 +60,7 @@ void *get_window(void *frontend); /* void * to avoid depending on gtk.h */
|
|||||||
|
|
||||||
/* Things pterm.c needs from gtkdlg.c */
|
/* Things pterm.c needs from gtkdlg.c */
|
||||||
void fatal_message_box(void *window, char *msg);
|
void fatal_message_box(void *window, char *msg);
|
||||||
void about_box(void);
|
void about_box(void *window);
|
||||||
void *eventlogstuff_new(void);
|
void *eventlogstuff_new(void);
|
||||||
void showeventlog(void *estuff, void *parentwin);
|
void showeventlog(void *estuff, void *parentwin);
|
||||||
void logevent_dlg(void *estuff, char *string);
|
void logevent_dlg(void *estuff, char *string);
|
||||||
@ -89,7 +89,7 @@ void uxsel_input_remove(int id);
|
|||||||
|
|
||||||
/* uxcfg.c */
|
/* uxcfg.c */
|
||||||
struct controlbox;
|
struct controlbox;
|
||||||
void unix_setup_config_box(struct controlbox *b, int midsession);
|
void unix_setup_config_box(struct controlbox *b, int midsession, void *window);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In the Unix Unicode layer, DEFAULT_CODEPAGE is a special value
|
* In the Unix Unicode layer, DEFAULT_CODEPAGE is a special value
|
||||||
|
@ -14,11 +14,11 @@ static void about_handler(union control *ctrl, void *dlg,
|
|||||||
void *data, int event)
|
void *data, int event)
|
||||||
{
|
{
|
||||||
if (event == EVENT_ACTION) {
|
if (event == EVENT_ACTION) {
|
||||||
about_box();
|
about_box(ctrl->generic.context.p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void unix_setup_config_box(struct controlbox *b, int midsession)
|
void unix_setup_config_box(struct controlbox *b, int midsession, void *win)
|
||||||
{
|
{
|
||||||
struct controlset *s, *s2;
|
struct controlset *s, *s2;
|
||||||
union control *c;
|
union control *c;
|
||||||
@ -30,7 +30,7 @@ void unix_setup_config_box(struct controlbox *b, int midsession)
|
|||||||
*/
|
*/
|
||||||
s = ctrl_getset(b, "", "", "");
|
s = ctrl_getset(b, "", "", "");
|
||||||
c = ctrl_pushbutton(s, "About", 'a', HELPCTX(no_help),
|
c = ctrl_pushbutton(s, "About", 'a', HELPCTX(no_help),
|
||||||
about_handler, P(NULL));
|
about_handler, P(win));
|
||||||
c->generic.column = 0;
|
c->generic.column = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,6 +115,13 @@ int first_fd(int *state, int *rwx)
|
|||||||
int select_result(int fd, int event)
|
int select_result(int fd, int event)
|
||||||
{
|
{
|
||||||
struct fd *fdstruct = find234(fds, &fd, uxsel_fd_findcmp);
|
struct fd *fdstruct = find234(fds, &fd, uxsel_fd_findcmp);
|
||||||
assert(fdstruct != NULL);
|
/*
|
||||||
|
* Apparently this can sometimes be NULL. Can't see how, but I
|
||||||
|
* assume it means I need to ignore the event since it's on an
|
||||||
|
* fd I've stopped being interested in. Sigh.
|
||||||
|
*/
|
||||||
|
if (fdstruct)
|
||||||
return fdstruct->callback(fd, event);
|
return fdstruct->callback(fd, event);
|
||||||
|
else
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user