Changeset 53

Show
Ignore:
Timestamp:
04/21/07 16:26:29 (2 years ago)
Author:
takkaria
Message:

Get the GTK port compiling under GTK2, and make use of GTK2 features.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/Makefile.std

    r47 r53  
    4141#SYS_xaw = -DUSE_XAW -lXaw -lXext -lSM -lICE -lXmu -lXt -lX11 
    4242 
    43 # Support the GTK graphical tookit (main-gtk.c) 
    44 #SYS_gtk = $(shell gtk-config --cflags) -DUSE_GTK $(shell gtk-config --libs) 
     43# Support the GTK2 graphical tookit (main-gtk.c) 
     44SYS_gtk = -DUSE_GTK $(shell pkg-config gtk+-2.0 --libs --cflags) 
    4545 
    4646# Support "projected mode". Experimental, requires X11/Xaw/GTK to be enabled (main-xpj.c) 
     
    5252# Support linux in VGA mode (main-lsl.c) -- Linux only 
    5353#SYS_lsl = -DUSE_LSL -lz -lvgagl -lvga 
     54 
     55# Support SDL frontend 
     56#SYS_sdl = -DUSE_SDL $(shell sdl-config --cflags) $(shell sdl-config --libs) -lSDL_ttf 
     57 
    5458 
    5559 
     
    96100 
    97101# Extract CFLAGS and LIBS from the system definitions 
    98 MODULES = $(SYS_x11) $(SYS_gcu) $(SYS_xaw) $(SYS_gtk) $(SYS_xpj) $(SYS_sla) $(SYS_cap) 
     102MODULES = $(SYS_x11) $(SYS_gcu) $(SYS_xaw) $(SYS_gtk) $(SYS_xpj) $(SYS_sla) $(SYS_cap) $(SYS_sdl) 
    99103CFLAGS += $(patsubst -l%,,$(MODULES)) $(INCLUDES) 
    100104LIBS += $(patsubst -D%,,$(patsubst -I%,, $(MODULES))) 
     
    114118# Object definitions 
    115119X11OBJS = maid-x11.o main-x11.o main-xaw.o main-gtk.o main-xpj.o 
    116 MAINOBJS = main.o main-cap.o main-gcu.o main-gtk.o main-sla.o $(X11OBJS) $(LINUXOBJS) 
     120MAINOBJS = main.o main-cap.o main-gcu.o main-sla.o $(X11OBJS) $(LINUXOBJS) # main-sdl.o not yet 
    117121OBJS = $(BASEOBJS) $(MAINOBJS) 
    118122 
  • trunk/src/main-gtk.c

    r1 r53  
    339339 
    340340 
     341 
     342/*** Callbacks: font selector */ 
     343 
    341344static void load_font(term_data *td, cptr fontname) 
    342345{ 
     
    348351} 
    349352 
    350  
    351353static void font_ok_callback(GtkWidget *widget, GtkWidget *font_selector) 
    352354{ 
     
    374376        gtk_object_set_data(GTK_OBJECT(font_selector), "term_data", user_data); 
    375377 
     378#if 0 
    376379        /* Filter to show only fixed-width fonts */ 
    377380        gtk_font_selection_dialog_set_filter(GTK_FONT_SELECTION_DIALOG(font_selector), 
    378381                                             GTK_FONT_FILTER_BASE, GTK_FONT_ALL, 
    379382                                             NULL, NULL, NULL, NULL, spacings, NULL); 
     383#endif 
    380384 
    381385        gtk_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_selector)->ok_button), 
     
    395399 
    396400 
    397 static void file_ok_callback(GtkWidget *widget, GtkWidget *file_selector) 
    398 
    399         char *f = gtk_file_selection_get_filename(GTK_FILE_SELECTION(file_selector)); 
    400  
    401         my_strcpy(savefile, f, sizeof(savefile)); 
    402  
    403         gtk_widget_destroy(file_selector); 
    404  
    405         game_in_progress = TRUE; 
    406         Term_flush(); 
    407         play_game(FALSE); 
    408         cleanup_angband(); 
    409         quit(NULL); 
    410 
     401/*** Callbacks: savefile opening ***/ 
     402 
     403 
     404/* Filter function for the savefile list */ 
     405static gboolean file_open_filter(const GtkFileFilterInfo *filter_info, gpointer data) 
     406
     407        const char *name = filter_info->display_name; 
     408 
     409        (void)data; 
     410 
     411        /* Count out known non-savefiles */ 
     412        if (strcmp(name, "Makefile.am") == 0 || 
     413            strcmp(name, "Makefile.in") == 0 || 
     414            strcmp(name, "delete.me") == 0) 
     415        { 
     416                return FALSE; 
     417        } 
     418 
     419        /* Let it pass */ 
     420        return TRUE; 
     421
     422 
    411423 
    412424 
    413425static void open_event_handler(GtkButton *was_clicked, gpointer user_data) 
    414426{ 
    415         GtkWidget *file_selector; 
     427        GtkWidget *selector_wid; 
     428        GtkFileChooser *selector; 
     429 
    416430        char buf[1024]; 
    417  
     431        const char *filename; 
     432 
     433        /* Forget it if the game is in progress */ 
     434        /* XXX Should disable the menu entry */ 
    418435        if (game_in_progress) 
    419436        { 
    420437                plog("You can't open a new game while you're still playing!"); 
    421         } 
    422         else 
    423         { 
    424                 /* Prepare the savefile path */ 
    425                 path_build(buf, sizeof(buf), ANGBAND_DIR_SAVE, "*"); 
    426  
    427                 file_selector = gtk_file_selection_new("Select a savefile"); 
    428                 gtk_file_selection_set_filename(GTK_FILE_SELECTION(file_selector), buf); 
    429                 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(file_selector)->ok_button), 
    430                                    "clicked", file_ok_callback, (gpointer)file_selector); 
    431  
    432                 /* Ensure that the dialog box is destroyed when the user clicks a button. */ 
    433                 gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(file_selector)->ok_button), 
    434                                           "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), 
    435                                           (gpointer)file_selector); 
    436  
    437                 gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(file_selector)->cancel_button), 
    438                                           "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), 
    439                                           (gpointer)file_selector); 
    440  
    441                 gtk_window_set_modal(GTK_WINDOW(file_selector), TRUE); 
    442                 gtk_widget_show(GTK_WIDGET(file_selector)); 
    443         } 
    444 
     438                return; 
     439        } 
     440 
     441        /* Create a new file selector dialogue box, with no parent */ 
     442        selector_wid = gtk_file_chooser_dialog_new("Select a savefile", NULL, 
     443                                               GTK_FILE_CHOOSER_ACTION_OPEN, 
     444                                               GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, 
     445                                               GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, 
     446                                               NULL); 
     447 
     448        /* For convenience */ 
     449        selector = GTK_FILE_CHOOSER(selector_wid); 
     450 
     451        /* Get the current directory (so we can find lib/save/) */ 
     452        filename = gtk_file_chooser_get_current_folder(selector); 
     453        path_build(buf, sizeof buf, filename, ANGBAND_DIR_SAVE); 
     454        gtk_file_chooser_set_current_folder(selector, buf); 
     455        plog(buf); 
     456 
     457        /* Restrict the showing of pointless files */ 
     458        GtkFileFilter *filter; 
     459        filter = gtk_file_filter_new(); 
     460        gtk_file_filter_add_custom(filter, GTK_FILE_FILTER_DISPLAY_NAME, file_open_filter, NULL, NULL); 
     461        gtk_file_chooser_set_filter(selector, filter); 
     462 
     463        /* Run the dialogue */ 
     464        if (gtk_dialog_run(GTK_DIALOG(selector_wid)) == GTK_RESPONSE_ACCEPT) 
     465        { 
     466                /* Get the filename, copy it into the savefile name */ 
     467                filename = gtk_file_chooser_get_filename(selector); 
     468                my_strcpy(savefile, filename, sizeof(savefile)); 
     469 
     470                /* Start playing the game */ 
     471                game_in_progress = TRUE; 
     472                Term_flush(); 
     473                play_game(FALSE); 
     474                cleanup_angband(); 
     475                quit(NULL); 
     476        } 
     477 
     478        /* Destroy it now we're done */ 
     479        gtk_widget_destroy(selector); 
     480 
     481        /* Done */ 
     482        return; 
     483
     484 
     485 
     486 
     487 
    445488 
    446489 
     
    678721 
    679722                /* Register callbacks */ 
    680                 gtk_signal_connect(GTK_OBJECT(file_exit_item), "activate", quit_event_handler, NULL); 
    681                 gtk_signal_connect(GTK_OBJECT(file_new_item), "activate", new_event_handler, NULL); 
    682                 gtk_signal_connect(GTK_OBJECT(file_open_item), "activate", open_event_handler, NULL); 
    683                 gtk_signal_connect(GTK_OBJECT(options_font_item), "activate", change_font_event_handler, td); 
     723                g_signal_connect(GTK_OBJECT(file_exit_item), "activate", G_CALLBACK(quit_event_handler), NULL); 
     724                g_signal_connect(GTK_OBJECT(file_new_item), "activate", G_CALLBACK(new_event_handler), NULL); 
     725                g_signal_connect(GTK_OBJECT(file_open_item), "activate", G_CALLBACK(open_event_handler), NULL); 
     726                g_signal_connect(GTK_OBJECT(options_font_item), "activate", G_CALLBACK(change_font_event_handler), td); 
    684727 
    685728                /* Build the menu bar */