Fix issue 165: MS Windows no longer opens the program window at arbitrary (wrong) position, it restores instead the last position you used.
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@810 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
b9849fe8ad
commit
1b06317924
@ -329,4 +329,8 @@
|
||||
;
|
||||
Palette_vertical = NO; (Default NO)
|
||||
|
||||
; The program remembers the last window position, if the
|
||||
; OS isn't able to do it by itself. (ie: Windows)
|
||||
Window_position = 9999,9999; (Default 9999,9999 which means: NA)
|
||||
|
||||
; end of configuration
|
||||
|
||||
3
graph.c
3
graph.c
@ -533,7 +533,8 @@ int Init_mode_video(int width, int height, int fullscreen, int pix_ratio)
|
||||
Mouse_Y=absolute_mouse_y/Pixel_height;
|
||||
if (Mouse_Y>=Screen_height)
|
||||
Mouse_Y=Screen_height-1;
|
||||
Set_mouse_position();
|
||||
if (fullscreen)
|
||||
Set_mouse_position();
|
||||
|
||||
Spare_offset_X=0; // | Il faut penser à éviter les incohérences
|
||||
Spare_offset_Y=0; // |- de décalage du brouillon par rapport à
|
||||
|
||||
36
main.c
36
main.c
@ -28,6 +28,7 @@
|
||||
#include <unistd.h>
|
||||
#include <SDL.h>
|
||||
#include <SDL_image.h>
|
||||
#include <SDL_syswm.h>
|
||||
|
||||
#include "const.h"
|
||||
#include "struct.h"
|
||||
@ -577,6 +578,22 @@ int Init_program(int argc,char * argv[])
|
||||
Video_mode[starting_videomode].Fullscreen,
|
||||
Pixel_ratio);
|
||||
|
||||
// Windows only: move back the window to its original position.
|
||||
#if defined(__WIN32__)
|
||||
if (!Video_mode[starting_videomode].Fullscreen)
|
||||
{
|
||||
if (Config.Window_pos_x != 9999 && Config.Window_pos_y != 9999)
|
||||
{
|
||||
//RECT r;
|
||||
static SDL_SysWMinfo pInfo;
|
||||
SDL_VERSION(&pInfo.version);
|
||||
SDL_GetWMInfo(&pInfo);
|
||||
//GetWindowRect(pInfo.window, &r);
|
||||
SetWindowPos(pInfo.window, 0, Config.Window_pos_x, Config.Window_pos_y, 0, 0, SWP_NOSIZE);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
Main_image_width=Screen_width/Pixel_width;
|
||||
Main_image_height=Screen_height/Pixel_height;
|
||||
Spare_image_width=Screen_width/Pixel_width;
|
||||
@ -635,6 +652,25 @@ void Program_shutdown(void)
|
||||
{
|
||||
int return_code;
|
||||
|
||||
// Windows only: Recover the window position.
|
||||
#if defined(__WIN32__)
|
||||
{
|
||||
RECT r;
|
||||
static SDL_SysWMinfo pInfo;
|
||||
|
||||
SDL_GetWMInfo(&pInfo);
|
||||
GetWindowRect(pInfo.window, &r);
|
||||
|
||||
Config.Window_pos_x = r.left;
|
||||
Config.Window_pos_y = r.top;
|
||||
}
|
||||
#else
|
||||
// All other targets: irrelevant dimensions.
|
||||
// Do not attempt to force them back on next program run.
|
||||
Config.Window_pos_x = 9999;
|
||||
Config.Window_pos_y = 9999;
|
||||
#endif
|
||||
|
||||
// On libère le buffer de gestion de lignes
|
||||
free(Horizontal_line_buffer);
|
||||
|
||||
|
||||
41
readini.c
41
readini.c
@ -199,6 +199,8 @@ int Load_INI_get_string(FILE * file,char * buffer,char * option_name,char * retu
|
||||
|
||||
int Load_INI_get_value(char * str,int * index,int * value)
|
||||
{
|
||||
int negative = 0;
|
||||
|
||||
// On teste si la valeur actuelle est YES (ou Y):
|
||||
|
||||
if (Load_INI_seek_pattern(str+(*index),"yes,")==1)
|
||||
@ -207,59 +209,51 @@ int Load_INI_get_value(char * str,int * index,int * value)
|
||||
(*index)+=4;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
if (strcmp(str+(*index),"yes")==0)
|
||||
{
|
||||
(*value)=1;
|
||||
(*index)+=3;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
if (Load_INI_seek_pattern(str+(*index),"y,")==1)
|
||||
{
|
||||
(*value)=1;
|
||||
(*index)+=2;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
if (strcmp(str+(*index),"y")==0)
|
||||
{
|
||||
(*value)=1;
|
||||
(*index)+=1;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
|
||||
|
||||
// On teste si la valeur actuelle est NO (ou N):
|
||||
|
||||
|
||||
if (Load_INI_seek_pattern(str+(*index),"no,")==1)
|
||||
{
|
||||
(*value)=0;
|
||||
(*index)+=3;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
if (strcmp(str+(*index),"no")==0)
|
||||
{
|
||||
(*value)=0;
|
||||
(*index)+=2;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
if (Load_INI_seek_pattern(str+(*index),"n,")==1)
|
||||
{
|
||||
(*value)=0;
|
||||
(*index)+=2;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
if (strcmp(str+(*index),"n")==0)
|
||||
{
|
||||
(*value)=0;
|
||||
(*index)+=1;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
if (str[*index]=='$')
|
||||
{
|
||||
(*value)=0;
|
||||
@ -286,7 +280,13 @@ int Load_INI_get_value(char * str,int * index,int * value)
|
||||
return ERROR_INI_CORRUPTED;
|
||||
}
|
||||
}
|
||||
else
|
||||
if (str[*index]=='-')
|
||||
{
|
||||
negative = 1;
|
||||
// next character
|
||||
(*index)++;
|
||||
// Fall thru
|
||||
}
|
||||
if ((str[*index]>='0') && (str[*index]<='9'))
|
||||
{
|
||||
(*value)=0;
|
||||
@ -294,7 +294,15 @@ int Load_INI_get_value(char * str,int * index,int * value)
|
||||
for (;;)
|
||||
{
|
||||
if ((str[*index]>='0') && (str[*index]<='9'))
|
||||
{
|
||||
(*value)=((*value)*10)+str[*index]-'0';
|
||||
if (negative)
|
||||
{
|
||||
(*value)*= -1;
|
||||
// This is to do it once per number.
|
||||
negative = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
if (str[*index]==',')
|
||||
{
|
||||
@ -772,6 +780,17 @@ int Load_INI(T_Config * conf)
|
||||
goto Erreur_ERREUR_INI_CORROMPU;
|
||||
conf->Palette_vertical=values[0];
|
||||
}
|
||||
|
||||
// Optional, the window position (>98.0%)
|
||||
conf->Window_pos_x=9999;
|
||||
conf->Window_pos_y=9999;
|
||||
if (!Load_INI_get_values (file,buffer,"Window_position",2,values))
|
||||
{
|
||||
conf->Window_pos_x = values[0];
|
||||
conf->Window_pos_y = values[1];
|
||||
}
|
||||
|
||||
|
||||
fclose(file);
|
||||
|
||||
free(filename);
|
||||
|
||||
@ -630,6 +630,11 @@ int Save_INI(T_Config * conf)
|
||||
if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Palette_vertical",1,values,1)))
|
||||
goto Erreur_Retour;
|
||||
|
||||
values[0]=conf->Window_pos_x;
|
||||
values[1]=conf->Window_pos_y;
|
||||
if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Window_position",2,values,0)))
|
||||
goto Erreur_Retour;
|
||||
|
||||
|
||||
Save_INI_flush(Ancien_fichier,Nouveau_fichier,buffer);
|
||||
|
||||
|
||||
2
struct.h
2
struct.h
@ -267,6 +267,8 @@ typedef struct
|
||||
byte Default_resolution; ///< Default video mode to use on startup. Index in ::Video_mode.
|
||||
char *Bookmark_directory[NB_BOOKMARKS];///< Bookmarked directories in fileselectors: This is the full dierctory name.
|
||||
char Bookmark_label[NB_BOOKMARKS][8+1];///< Bookmarked directories in fileselectors: This is the displayed name.
|
||||
int Window_pos_x; ///< Last window x position (9999 if unsupportd/irrelevant for the platform)
|
||||
int Window_pos_y; ///< Last window y position (9999 if unsupportd/irrelevant for the platform)
|
||||
} T_Config;
|
||||
|
||||
// Structures utilisées pour les descriptions de pages et de liste de pages.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user