diff --git a/src/sbbs3/gtkchat/GNUmakefile b/src/sbbs3/gtkchat/GNUmakefile index cea3f237999f539c77fd64b5e6653b8b9f89a590..c5ef814f5eeac21065407369c0f1c8c39b03c5b1 100644 --- a/src/sbbs3/gtkchat/GNUmakefile +++ b/src/sbbs3/gtkchat/GNUmakefile @@ -22,11 +22,10 @@ endif vpath %.c .. -CFLAGS += -I.. -I../../comio $(SMBLIB_CFLAGS) $(HASH_CFLAGS) $(ENCODE_CFLAGS) $(XPDEV-MT_CFLAGS) $(JS_CFLAGS) $(CRYPT_CFLAGS) `pkg-config gtk+-2.0 --cflags` +CFLAGS += -I.. -I../../comio $(SMBLIB_CFLAGS) $(HASH_CFLAGS) $(ENCODE_CFLAGS) $(XPDEV-MT_CFLAGS) $(JS_CFLAGS) $(CRYPT_CFLAGS) `pkg-config gtk+-3.0 --cflags` LDFLAGS += $(SMBLIB_LDFLAGS) $(ENCODE_LDFLAGS) $(HASH_LDFLAGS) $(XPDEV-MT_LDFLAGS) $(MT_LDFLAGS) -EXTRA_LIBS += `pkg-config gtk+-2.0 --libs` +EXTRA_LIBS += `pkg-config gtk+-3.0 --libs` $(GTKCHAT): $(OBJS) @echo Linking $@ $(QUIET)$(CC) $(LDFLAGS) $(OBJS) -o $@ $(EXTRA_LIBS) $(SMBLIB_LIBS) $(ENCODE_LIBS) $(HASH_LIBS) $(XPDEV-MT_LIBS) - $(QUIET)cd $(EXEODIR) && ln -fs ../gtk-chat.glade . diff --git a/src/sbbs3/gtkchat/callbacks.c b/src/sbbs3/gtkchat/callbacks.c index 5f3e5344e1f48b85e5f097e11233f49024ec11ae..0de97d6454570af042825019a6b766d83bcf7f1d 100644 --- a/src/sbbs3/gtkchat/callbacks.c +++ b/src/sbbs3/gtkchat/callbacks.c @@ -65,6 +65,7 @@ gint connect_wait(gpointer data) { GtkWidget *MainWindow; + gint x, y; switch(chat_check_remote()) { case -1: /* Error */ @@ -74,8 +75,10 @@ connect_wait(gpointer data) case 1: /* Waiting for remote */ return(TRUE); case 2: /* Chat active */ - MainWindow = create_MainWindow (); + gtk_window_get_position(data, &x, &y); gtk_widget_hide (GTK_WIDGET(data)); + MainWindow = create_MainWindow (); + gtk_window_move(GTK_WINDOW(MainWindow), x, y); gtk_widget_show (MainWindow); return(FALSE); } @@ -84,7 +87,7 @@ connect_wait(gpointer data) void -on_MainWindow_destroy (GtkObject *object, +on_MainWindow_destroy (GObject *object, gpointer user_data) { chat_close(); @@ -102,7 +105,7 @@ on_LocalText_key_press_event (GtkWidget *widget, gsize inbytes; gsize outbytes; - if(event->keyval==GDK_BackSpace || event->keyval==GDK_Delete) { + if(event->keyval==GDK_KEY_BackSpace || event->keyval==GDK_KEY_Delete) { GtkTextIter start; GtkTextIter end; @@ -134,7 +137,7 @@ on_LocalText_key_press_event (GtkWidget *widget, ); g_free(outstr); } - if(event->keyval == GDK_Return || event->keyval == GDK_KP_Enter) { + if(event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_KP_Enter) { instr[1]=0; instr[0]='\n'; chat_write_byte('\r'); diff --git a/src/sbbs3/gtkchat/callbacks.h b/src/sbbs3/gtkchat/callbacks.h index 944a5a0adc2600ed7f8d11ee0c39caa345edfe1f..18796e0cd0b6481dbe479a6e227aab59dd678334 100644 --- a/src/sbbs3/gtkchat/callbacks.h +++ b/src/sbbs3/gtkchat/callbacks.h @@ -2,7 +2,7 @@ void -on_MainWindow_destroy (GtkObject *object, +on_MainWindow_destroy (GObject *object, gpointer user_data); gboolean diff --git a/src/sbbs3/gtkchat/chatfuncs.c b/src/sbbs3/gtkchat/chatfuncs.c index 1c029f4e2e3567e6e5d6d61b1219978cb2d64ecb..cccaac1529978a6e68331d28a7b4b43d4d2fac47 100644 --- a/src/sbbs3/gtkchat/chatfuncs.c +++ b/src/sbbs3/gtkchat/chatfuncs.c @@ -172,9 +172,13 @@ int chat_write_byte(unsigned char ch) int chat_close(void) { - if(in != -1) + if(in != -1) { close(in); - if(out != -1) + in = -1; + } + if(out != -1) { close(out); + out = -1; + } return(togglechat(FALSE)); } diff --git a/src/sbbs3/gtkchat/gtk-chat.glade b/src/sbbs3/gtkchat/gtk-chat.glade index 02c3efb0116ca37ebeb8c918ce52293c72226954..440336d17ca208d91d7c4ba482785266ef548bf3 100644 --- a/src/sbbs3/gtkchat/gtk-chat.glade +++ b/src/sbbs3/gtkchat/gtk-chat.glade @@ -1,216 +1,136 @@ -<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> -<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> - -<glade-interface> - -<widget class="GtkWindow" id="MainWindow"> - <property name="width_request">400</property> - <property name="height_request">300</property> - <property name="visible">True</property> - <property name="title" translatable="yes">Synchronet Sysop Chat</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - <property name="icon_name">stock_help-chat</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">False</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_UTILITY</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <property name="urgency_hint">False</property> - <signal name="destroy" handler="on_MainWindow_destroy" last_modification_time="Wed, 08 Mar 2006 07:15:35 GMT"/> - - <child> - <widget class="GtkVPaned" id="SplitPane"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="position">148</property> - - <child> - <widget class="GtkTextView" id="RemoteText"> - <property name="visible">True</property> - <property name="tooltip" translatable="yes">Remote Text Window</property> - <property name="editable">False</property> - <property name="overwrite">False</property> - <property name="accepts_tab">True</property> - <property name="justification">GTK_JUSTIFY_LEFT</property> - <property name="wrap_mode">GTK_WRAP_WORD</property> - <property name="cursor_visible">True</property> - <property name="pixels_above_lines">0</property> - <property name="pixels_below_lines">0</property> - <property name="pixels_inside_wrap">0</property> - <property name="left_margin">0</property> - <property name="right_margin">0</property> - <property name="indent">0</property> - <property name="text" translatable="yes"></property> - </widget> - <packing> - <property name="shrink">True</property> - <property name="resize">False</property> - </packing> - </child> - - <child> - <widget class="GtkTextView" id="LocalText"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="has_focus">True</property> - <property name="editable">False</property> - <property name="overwrite">False</property> - <property name="accepts_tab">True</property> - <property name="justification">GTK_JUSTIFY_LEFT</property> - <property name="wrap_mode">GTK_WRAP_WORD</property> - <property name="cursor_visible">True</property> - <property name="pixels_above_lines">0</property> - <property name="pixels_below_lines">0</property> - <property name="pixels_inside_wrap">0</property> - <property name="left_margin">0</property> - <property name="right_margin">0</property> - <property name="indent">0</property> - <property name="text" translatable="yes"></property> - <signal name="key_press_event" handler="on_LocalText_key_press_event" last_modification_time="Wed, 08 Mar 2006 07:13:25 GMT"/> - </widget> - <packing> - <property name="shrink">True</property> - <property name="resize">True</property> - </packing> - </child> - </widget> - </child> -</widget> - -<widget class="GtkWindow" id="WaitWindow"> - <property name="visible">True</property> - <property name="title" translatable="yes">Waiting for user</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">False</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <property name="urgency_hint">False</property> - - <child> - <widget class="GtkFixed" id="fixed1"> - <property name="width_request">400</property> - <property name="height_request">40</property> - <property name="visible">True</property> - - <child> - <widget class="GtkLabel" id="MessageLabel"> - <property name="width_request">400</property> - <property name="height_request">16</property> - <property name="visible">True</property> - <property name="label" translatable="yes">Waiting for user to connect.</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="x">0</property> - <property name="y">0</property> - </packing> - </child> - - <child> - <widget class="GtkButton" id="CancelButton"> - <property name="width_request">88</property> - <property name="height_request">24</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_CancelButton_clicked" last_modification_time="Thu, 09 Mar 2006 02:41:33 GMT"/> - - <child> - <widget class="GtkAlignment" id="alignment1"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - - <child> - <widget class="GtkHBox" id="hbox1"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - - <child> - <widget class="GtkImage" id="image1"> - <property name="visible">True</property> - <property name="stock">gtk-cancel</property> - <property name="icon_size">4</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label2"> - <property name="visible">True</property> - <property name="label" translatable="yes">Cancel</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - </widget> - <packing> - <property name="x">160</property> - <property name="y">16</property> - </packing> - </child> - </widget> - </child> -</widget> - -</glade-interface> +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.22.1 --> +<!--*- mode: xml -*--> +<interface> + <requires lib="gtk+" version="3.0"/> + <object class="GtkWindow" id="MainWindow"> + <property name="width_request">400</property> + <property name="height_request">300</property> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="title" translatable="yes">Synchronet Sysop Chat</property> + <property name="icon_name">stock_help-chat</property> + <property name="type_hint">utility</property> + <signal name="destroy" handler="on_MainWindow_destroy" swapped="no"/> + <child> + <placeholder/> + </child> + <child> + <object class="GtkPaned" id="SplitPane"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="orientation">vertical</property> + <property name="position">148</property> + <child> + <object class="GtkTextView" id="RemoteText"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="editable">False</property> + <property name="wrap_mode">word</property> + </object> + <packing> + <property name="resize">False</property> + <property name="shrink">True</property> + </packing> + </child> + <child> + <object class="GtkTextView" id="LocalText"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="has_focus">True</property> + <property name="editable">False</property> + <property name="wrap_mode">word</property> + <signal name="key-press-event" handler="on_LocalText_key_press_event" swapped="no"/> + </object> + <packing> + <property name="resize">True</property> + <property name="shrink">True</property> + </packing> + </child> + </object> + </child> + </object> + <object class="GtkWindow" id="WaitWindow"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="title" translatable="yes">Waiting for user</property> + <child> + <placeholder/> + </child> + <child> + <object class="GtkFixed" id="fixed1"> + <property name="width_request">400</property> + <property name="height_request">40</property> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkLabel" id="MessageLabel"> + <property name="width_request">400</property> + <property name="height_request">16</property> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Waiting for user to connect.</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + </object> + </child> + <child> + <object class="GtkButton" id="CancelButton"> + <property name="width_request">88</property> + <property name="height_request">24</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <signal name="clicked" handler="on_CancelButton_clicked" swapped="no"/> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xscale">0</property> + <property name="yscale">0</property> + <child> + <object class="GtkBox" id="hbox1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">2</property> + <child> + <object class="GtkImage" id="image1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stock">gtk-cancel</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Cancel</property> + <property name="use_underline">True</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="x">160</property> + <property name="y">16</property> + </packing> + </child> + </object> + </child> + </object> +</interface> diff --git a/src/sbbs3/gtkchat/interface.c b/src/sbbs3/gtkchat/interface.c index 99e4938c8cdc7f0cc11672739cf24bd8d24231d4..e56ed6abf43a53965130a78844c5ad6798ff9574 100644 --- a/src/sbbs3/gtkchat/interface.c +++ b/src/sbbs3/gtkchat/interface.c @@ -13,7 +13,7 @@ #define GLADE_HOOKUP_OBJECT(component,widget,name) \ g_object_set_data_full (G_OBJECT (component), name, \ - gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref) + g_object_ref (widget), (GDestroyNotify) g_object_unref) #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \ g_object_set_data (G_OBJECT (component), name, widget) @@ -27,17 +27,13 @@ create_MainWindow (void) GtkWidget *SplitPane; GtkWidget *RemoteText; GtkWidget *LocalText; - GtkTooltips *tooltips; - - tooltips = gtk_tooltips_new (); MainWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request (MainWindow, 400, 300); gtk_window_set_title (GTK_WINDOW (MainWindow), "Synchronet Sysop Chat"); - gtk_window_set_icon_name (GTK_WINDOW (MainWindow), "stock_help-chat"); - gtk_window_set_type_hint (GTK_WINDOW (MainWindow), GDK_WINDOW_TYPE_HINT_UTILITY); + gtk_window_set_icon_name (GTK_WINDOW (MainWindow), "user-available"); - SplitPane = gtk_vpaned_new (); + SplitPane = gtk_paned_new (GTK_ORIENTATION_VERTICAL); gtk_widget_show (SplitPane); gtk_container_add (GTK_CONTAINER (MainWindow), SplitPane); gtk_paned_set_position (GTK_PANED (SplitPane), 148); @@ -45,8 +41,8 @@ create_MainWindow (void) RemoteText = gtk_text_view_new (); gtk_widget_show (RemoteText); gtk_paned_pack1 (GTK_PANED (SplitPane), RemoteText, FALSE, TRUE); - GTK_WIDGET_UNSET_FLAGS (RemoteText, GTK_CAN_FOCUS); - gtk_tooltips_set_tip (tooltips, RemoteText, "Remote Text Window", NULL); + gtk_widget_set_can_focus (RemoteText, FALSE); + gtk_widget_set_tooltip_text (RemoteText, "Remote Text Window"); gtk_text_view_set_editable (GTK_TEXT_VIEW (RemoteText), FALSE); gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (RemoteText), GTK_WRAP_WORD); @@ -68,11 +64,10 @@ create_MainWindow (void) GLADE_HOOKUP_OBJECT (MainWindow, SplitPane, "SplitPane"); GLADE_HOOKUP_OBJECT (MainWindow, RemoteText, "RemoteText"); GLADE_HOOKUP_OBJECT (MainWindow, LocalText, "LocalText"); - GLADE_HOOKUP_OBJECT_NO_REF (MainWindow, tooltips, "tooltips"); gtk_widget_grab_focus (LocalText); - gtk_timeout_add(50, get_from_remote, RemoteText); + g_timeout_add(50, get_from_remote, RemoteText); return MainWindow; } @@ -83,13 +78,10 @@ create_WaitWindow (void) GtkWidget *WaitWindow; GtkWidget *fixed1; GtkWidget *CancelButton; - GtkWidget *alignment1; - GtkWidget *hbox1; - GtkWidget *image1; - GtkWidget *label2; WaitWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (WaitWindow), "Waiting for user"); + gtk_window_set_title (GTK_WINDOW (WaitWindow), "Synchronet Sysop Chat"); + gtk_window_set_icon_name (GTK_WINDOW (WaitWindow), "user-away"); fixed1 = gtk_fixed_new (); gtk_widget_show (fixed1); @@ -101,27 +93,11 @@ create_WaitWindow (void) gtk_fixed_put (GTK_FIXED (fixed1), MessageLabel, 0, 0); gtk_widget_set_size_request (MessageLabel, 400, 16); - CancelButton = gtk_button_new (); + CancelButton = gtk_widget_new (GTK_TYPE_BUTTON, "label", "_Cancel", "use-underline", TRUE, "xalign", 0.5, "yalign", 0.5, NULL); gtk_widget_show (CancelButton); gtk_fixed_put (GTK_FIXED (fixed1), CancelButton, 160, 16); gtk_widget_set_size_request (CancelButton, 88, 24); - alignment1 = gtk_alignment_new (0.5, 0.5, 0, 0); - gtk_widget_show (alignment1); - gtk_container_add (GTK_CONTAINER (CancelButton), alignment1); - - hbox1 = gtk_hbox_new (FALSE, 2); - gtk_widget_show (hbox1); - gtk_container_add (GTK_CONTAINER (alignment1), hbox1); - - image1 = gtk_image_new_from_stock ("gtk-cancel", GTK_ICON_SIZE_BUTTON); - gtk_widget_show (image1); - gtk_box_pack_start (GTK_BOX (hbox1), image1, FALSE, FALSE, 0); - - label2 = gtk_label_new_with_mnemonic ("Cancel"); - gtk_widget_show (label2); - gtk_box_pack_start (GTK_BOX (hbox1), label2, FALSE, FALSE, 0); - g_signal_connect ((gpointer) CancelButton, "clicked", G_CALLBACK (on_CancelButton_clicked), NULL); @@ -131,12 +107,8 @@ create_WaitWindow (void) GLADE_HOOKUP_OBJECT (WaitWindow, fixed1, "fixed1"); GLADE_HOOKUP_OBJECT (WaitWindow, MessageLabel, "MessageLabel"); GLADE_HOOKUP_OBJECT (WaitWindow, CancelButton, "CancelButton"); - GLADE_HOOKUP_OBJECT (WaitWindow, alignment1, "alignment1"); - GLADE_HOOKUP_OBJECT (WaitWindow, hbox1, "hbox1"); - GLADE_HOOKUP_OBJECT (WaitWindow, image1, "image1"); - GLADE_HOOKUP_OBJECT (WaitWindow, label2, "label2"); - gtk_timeout_add(50, connect_wait, WaitWindow); + g_timeout_add(50, connect_wait, WaitWindow); return WaitWindow; } diff --git a/src/sbbs3/gtkchat/main.c b/src/sbbs3/gtkchat/main.c index 0600067aa04d997e17699fcb82b23cf587cdc3f3..d80bda8ae582cb85549db877d644ed7e9f3fe845 100644 --- a/src/sbbs3/gtkchat/main.c +++ b/src/sbbs3/gtkchat/main.c @@ -1,4 +1,5 @@ #include <stdlib.h> +#include <locale.h> #include <gtk/gtk.h> @@ -22,7 +23,7 @@ main (int argc, char *argv[]) char *ctrl_dir; GtkWidget *WaitWindow; - gtk_set_locale (); + setlocale(LC_ALL, ""); gtk_init (&argc, &argv); /* add_pixmap_directory (PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps"); */ diff --git a/src/sbbs3/gtkchat/support.c b/src/sbbs3/gtkchat/support.c index 601777a1164102d853be394bc2515d57706667c7..d59de4196a953af431da2252b64977b99319f365 100644 --- a/src/sbbs3/gtkchat/support.c +++ b/src/sbbs3/gtkchat/support.c @@ -19,7 +19,7 @@ lookup_widget (GtkWidget *widget, if (GTK_IS_MENU (widget)) parent = gtk_menu_get_attach_widget (GTK_MENU (widget)); else - parent = widget->parent; + parent = gtk_widget_get_parent(widget); if (!parent) parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey"); if (parent == NULL)