mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-05-16 21:50:20 +00:00
Compare commits
17 Commits
20b552ad9d
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
72427006dd | ||
|
|
0e5f702651 | ||
| 4f1b0fc838 | |||
|
|
23d0963c2d | ||
|
|
dcb35fb80f | ||
| b1768854c3 | |||
| 4ed4eaf8e8 | |||
|
|
d167b53b17 | ||
| 18eff80a30 | |||
| a44ec5f624 | |||
|
|
5da518f50e | ||
|
|
ebb11a8ac5 | ||
|
|
dd9c5db1aa | ||
| 984ac9763e | |||
|
|
ad67af2f8f | ||
| cc8460d366 | |||
| 1dc9b9c956 |
2
.github/workflows/appimage-build.yml
vendored
2
.github/workflows/appimage-build.yml
vendored
@@ -34,7 +34,7 @@ jobs:
|
|||||||
libwayland-client0 libwayland-cursor0 libwayland-egl1 \
|
libwayland-client0 libwayland-cursor0 libwayland-egl1 \
|
||||||
libxkbcommon0 \
|
libxkbcommon0 \
|
||||||
libgtk-3-bin libglib2.0-bin shared-mime-info gsettings-desktop-schemas \
|
libgtk-3-bin libglib2.0-bin shared-mime-info gsettings-desktop-schemas \
|
||||||
libluajit-5.1-dev libpci-dev libperl-dev libssl-dev libayatana-appindicator3-dev \
|
liblua5.4-dev libpci-dev libperl-dev libssl-dev libayatana-appindicator3-dev \
|
||||||
perl python3 python3-minimal python3-dev python3-cffi mono-devel desktop-file-utils \
|
perl python3 python3-minimal python3-dev python3-cffi mono-devel desktop-file-utils \
|
||||||
fonts-noto-color-emoji breeze-gtk-theme \
|
fonts-noto-color-emoji breeze-gtk-theme \
|
||||||
patchelf file curl
|
patchelf file curl
|
||||||
|
|||||||
1
.github/workflows/manjaro-package-build.yml
vendored
1
.github/workflows/manjaro-package-build.yml
vendored
@@ -34,7 +34,6 @@ jobs:
|
|||||||
openssl \
|
openssl \
|
||||||
libcanberra \
|
libcanberra \
|
||||||
libayatana-appindicator \
|
libayatana-appindicator \
|
||||||
luajit \
|
|
||||||
iso-codes \
|
iso-codes \
|
||||||
lua \
|
lua \
|
||||||
perl \
|
perl \
|
||||||
|
|||||||
@@ -104,12 +104,14 @@ thread_sha256_file (GTask *task, GFile *file, gpointer task_data, GCancellable *
|
|||||||
g_checksum_update (checksum, buffer, ret);
|
g_checksum_update (checksum, buffer, ret);
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
g_checksum_free (checksum);
|
|
||||||
g_task_return_error (task, error);
|
g_task_return_error (task, error);
|
||||||
return;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_task_return_pointer (task, g_strdup (g_checksum_get_string (checksum)), g_free);
|
g_task_return_pointer (task, g_strdup (g_checksum_get_string (checksum)), g_free);
|
||||||
|
cleanup:
|
||||||
|
g_input_stream_close(G_INPUT_STREAM(istream), NULL, NULL);
|
||||||
|
g_object_unref(istream);
|
||||||
g_checksum_free (checksum);
|
g_checksum_free (checksum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,19 @@
|
|||||||
if cc.get_id() == 'msvc'
|
if cc.get_id() == 'msvc'
|
||||||
lua_dep = cc.find_library('lua51')
|
lua_dep = cc.find_library('lua51')
|
||||||
else
|
else
|
||||||
lua_dep = dependency(get_option('with-lua'))
|
lua_opt = get_option('with-lua')
|
||||||
|
lua_dep = dependency(lua_opt, required: false)
|
||||||
|
if not lua_dep.found() and lua_opt == 'lua-5.4'
|
||||||
|
foreach lua_name : ['lua5.4', 'lua-5.3', 'lua5.3', 'lua']
|
||||||
|
lua_dep = dependency(lua_name, required: false)
|
||||||
|
if lua_dep.found()
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
endforeach
|
||||||
|
endif
|
||||||
|
if not lua_dep.found()
|
||||||
|
error('Dependency "' + lua_opt + '" not found')
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
shared_module('lua', 'lua.c',
|
shared_module('lua', 'lua.c',
|
||||||
|
|||||||
@@ -320,9 +320,9 @@ def _on_say_command(word, word_eol, userdata):
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
try:
|
try:
|
||||||
python = _cstr(word_eol[1])
|
python = __decode(_cstr(word_eol[1]))
|
||||||
except Exception:
|
except Exception:
|
||||||
python = b''
|
python = ''
|
||||||
|
|
||||||
if not python:
|
if not python:
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -782,6 +782,7 @@ load_default_config(void)
|
|||||||
prefs.hex_gui_tab_middleclose = 1;
|
prefs.hex_gui_tab_middleclose = 1;
|
||||||
prefs.hex_gui_tab_server = 1;
|
prefs.hex_gui_tab_server = 1;
|
||||||
prefs.hex_gui_tab_sort = 1;
|
prefs.hex_gui_tab_sort = 1;
|
||||||
|
prefs.hex_gui_tab_scrollchans = 1;
|
||||||
prefs.hex_gui_topicbar = 1;
|
prefs.hex_gui_topicbar = 1;
|
||||||
prefs.hex_gui_transparency = 255;
|
prefs.hex_gui_transparency = 255;
|
||||||
prefs.hex_gui_tray = 1;
|
prefs.hex_gui_tray = 1;
|
||||||
|
|||||||
@@ -4166,10 +4166,10 @@ const struct commands xc_cmds[] = {
|
|||||||
static int
|
static int
|
||||||
command_compare (const void *a, const void *b)
|
command_compare (const void *a, const void *b)
|
||||||
{
|
{
|
||||||
return g_ascii_strcasecmp (a, ((struct commands *)b)->name);
|
return g_ascii_strcasecmp (a, ((const struct commands *)b)->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct commands *
|
static const struct commands *
|
||||||
find_internal_command (char *name)
|
find_internal_command (char *name)
|
||||||
{
|
{
|
||||||
/* the "-1" is to skip the NULL terminator */
|
/* the "-1" is to skip the NULL terminator */
|
||||||
@@ -4205,7 +4205,7 @@ usercommand_show_help (session *sess, char *name)
|
|||||||
static void
|
static void
|
||||||
help (session *sess, char *tbuf, char *helpcmd, int quiet)
|
help (session *sess, char *tbuf, char *helpcmd, int quiet)
|
||||||
{
|
{
|
||||||
struct commands *cmd;
|
const struct commands *cmd;
|
||||||
|
|
||||||
if (plugin_show_help (sess, helpcmd))
|
if (plugin_show_help (sess, helpcmd))
|
||||||
return;
|
return;
|
||||||
@@ -4763,7 +4763,7 @@ handle_command (session *sess, char *cmd, int check_spch)
|
|||||||
char *word[PDIWORDS+1];
|
char *word[PDIWORDS+1];
|
||||||
char *word_eol[PDIWORDS+1];
|
char *word_eol[PDIWORDS+1];
|
||||||
static int command_level = 0;
|
static int command_level = 0;
|
||||||
struct commands *int_cmd;
|
const struct commands *int_cmd;
|
||||||
char *pdibuf;
|
char *pdibuf;
|
||||||
char *tbuf;
|
char *tbuf;
|
||||||
int len;
|
int len;
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
* Copyright (C) 1998-2010 Peter Zelezny.
|
* Copyright (C) 1998-2010 Peter Zelezny.
|
||||||
* Copyright (C) 2009-2013 Berke Viktor.
|
* Copyright (C) 2009-2013 Berke Viktor.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or
|
||||||
* it under the terms of the GNU General Public License as published by
|
* modify it under the terms of the GNU General Public License
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* as published by the Free Software Foundation; either version 2
|
||||||
* (at your option) any later version.
|
* of the License, or (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
@@ -13,8 +13,8 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, see
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* You can distribute this header with your plugins for easy compilation */
|
/* You can distribute this header with your plugins for easy compilation */
|
||||||
|
|||||||
@@ -304,20 +304,28 @@ tab_scroll_right_down_clicked (GtkWidget *widget, chanview *cv)
|
|||||||
static gboolean
|
static gboolean
|
||||||
tab_scroll_cb (GtkWidget *widget, GdkEventScroll *event, gpointer cv)
|
tab_scroll_cb (GtkWidget *widget, GdkEventScroll *event, gpointer cv)
|
||||||
{
|
{
|
||||||
|
int direction = cv_scroll_direction (event);
|
||||||
|
|
||||||
if (prefs.hex_gui_tab_scrollchans)
|
if (prefs.hex_gui_tab_scrollchans)
|
||||||
{
|
{
|
||||||
if (event->direction == GDK_SCROLL_DOWN)
|
if (direction != 0)
|
||||||
mg_switch_page (1, 1);
|
{
|
||||||
else if (event->direction == GDK_SCROLL_UP)
|
mg_switch_page (1, direction);
|
||||||
mg_switch_page (1, -1);
|
return TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* mouse wheel scrolling */
|
if (direction < 0)
|
||||||
if (event->direction == GDK_SCROLL_UP)
|
{
|
||||||
tab_scroll_left_up_clicked (widget, cv);
|
tab_scroll_left_up_clicked (widget, cv);
|
||||||
else if (event->direction == GDK_SCROLL_DOWN)
|
return TRUE;
|
||||||
|
}
|
||||||
|
else if (direction > 0)
|
||||||
|
{
|
||||||
tab_scroll_right_down_clicked (widget, cv);
|
tab_scroll_right_down_clicked (widget, cv);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -345,17 +353,17 @@ cv_tabs_init (chanview *cv)
|
|||||||
|
|
||||||
viewport = gtk_scrolled_window_new (0, 0);
|
viewport = gtk_scrolled_window_new (0, 0);
|
||||||
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (viewport), GTK_SHADOW_NONE);
|
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (viewport), GTK_SHADOW_NONE);
|
||||||
gtk_scrolled_window_set_overlay_scrolling (GTK_SCROLLED_WINDOW (viewport), FALSE);
|
|
||||||
if (cv->vertical)
|
if (cv->vertical)
|
||||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (viewport),
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (viewport),
|
||||||
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
|
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
|
||||||
else
|
else
|
||||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (viewport),
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (viewport),
|
||||||
GTK_POLICY_ALWAYS, GTK_POLICY_NEVER);
|
GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
|
||||||
gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW (viewport), 1);
|
gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW (viewport), 1);
|
||||||
gtk_scrolled_window_set_min_content_height (GTK_SCROLLED_WINDOW (viewport), 1);
|
gtk_scrolled_window_set_min_content_height (GTK_SCROLLED_WINDOW (viewport), 1);
|
||||||
gtk_widget_set_hexpand (viewport, TRUE);
|
gtk_widget_set_hexpand (viewport, TRUE);
|
||||||
gtk_widget_set_vexpand (viewport, TRUE);
|
gtk_widget_set_vexpand (viewport, TRUE);
|
||||||
|
cv_add_scroll_events (viewport);
|
||||||
g_signal_connect (G_OBJECT (viewport), "scroll-event",
|
g_signal_connect (G_OBJECT (viewport), "scroll-event",
|
||||||
G_CALLBACK (tab_scroll_cb), cv);
|
G_CALLBACK (tab_scroll_cb), cv);
|
||||||
gtk_box_pack_start (GTK_BOX (outer), viewport, 1, 1, 0);
|
gtk_box_pack_start (GTK_BOX (outer), viewport, 1, 1, 0);
|
||||||
@@ -677,9 +685,11 @@ cv_tabs_add (chanview *cv, chan *ch, char *name, GtkTreeIter *parent)
|
|||||||
gtk_widget_set_name (but, "zoitechat-tab");
|
gtk_widget_set_name (but, "zoitechat-tab");
|
||||||
gtk_widget_set_size_request (but, -1, 14);
|
gtk_widget_set_size_request (but, -1, 14);
|
||||||
gtk_widget_add_events (but, GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK);
|
gtk_widget_add_events (but, GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK);
|
||||||
|
cv_add_scroll_events (but);
|
||||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
|
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
|
||||||
label = gtk_label_new (name);
|
label = gtk_label_new (name);
|
||||||
close_button = gtk_button_new ();
|
close_button = gtk_button_new ();
|
||||||
|
cv_add_scroll_events (close_button);
|
||||||
gtk_style_context_add_class (gtk_widget_get_style_context (close_button), "flat");
|
gtk_style_context_add_class (gtk_widget_get_style_context (close_button), "flat");
|
||||||
close_icon = gtk_image_new_from_icon_name ("window-close-symbolic", GTK_ICON_SIZE_MENU);
|
close_icon = gtk_image_new_from_icon_name ("window-close-symbolic", GTK_ICON_SIZE_MENU);
|
||||||
gtk_image_set_pixel_size (GTK_IMAGE (close_icon), 8);
|
gtk_image_set_pixel_size (GTK_IMAGE (close_icon), 8);
|
||||||
@@ -695,6 +705,10 @@ cv_tabs_add (chanview *cv, chan *ch, char *name, GtkTreeIter *parent)
|
|||||||
/* used to trap right-clicks */
|
/* used to trap right-clicks */
|
||||||
g_signal_connect (G_OBJECT (but), "button-press-event",
|
g_signal_connect (G_OBJECT (but), "button-press-event",
|
||||||
G_CALLBACK (tab_click_cb), ch);
|
G_CALLBACK (tab_click_cb), ch);
|
||||||
|
g_signal_connect (G_OBJECT (but), "scroll-event",
|
||||||
|
G_CALLBACK (tab_scroll_cb), cv);
|
||||||
|
g_signal_connect (G_OBJECT (close_button), "scroll-event",
|
||||||
|
G_CALLBACK (tab_scroll_cb), cv);
|
||||||
g_signal_connect (G_OBJECT (but), "motion-notify-event",
|
g_signal_connect (G_OBJECT (but), "motion-notify-event",
|
||||||
G_CALLBACK (tab_close_motion_cb), ch);
|
G_CALLBACK (tab_close_motion_cb), ch);
|
||||||
g_signal_connect (G_OBJECT (but), "leave-notify-event",
|
g_signal_connect (G_OBJECT (but), "leave-notify-event",
|
||||||
|
|||||||
@@ -111,12 +111,12 @@ cv_tree_scroll_event_cb (GtkWidget *widget, GdkEventScroll *event, gpointer user
|
|||||||
{
|
{
|
||||||
if (prefs.hex_gui_tab_scrollchans)
|
if (prefs.hex_gui_tab_scrollchans)
|
||||||
{
|
{
|
||||||
if (event->direction == GDK_SCROLL_DOWN)
|
int direction = cv_scroll_direction (event);
|
||||||
mg_switch_page (1, 1);
|
|
||||||
else if (event->direction == GDK_SCROLL_UP)
|
|
||||||
mg_switch_page (1, -1);
|
|
||||||
|
|
||||||
return TRUE;
|
if (direction != 0)
|
||||||
|
mg_switch_page (1, direction);
|
||||||
|
|
||||||
|
return direction != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -141,6 +141,7 @@ cv_tree_init (chanview *cv)
|
|||||||
win = gtk_scrolled_window_new (0, 0);
|
win = gtk_scrolled_window_new (0, 0);
|
||||||
gtk_widget_set_hexpand (win, TRUE);
|
gtk_widget_set_hexpand (win, TRUE);
|
||||||
gtk_widget_set_vexpand (win, TRUE);
|
gtk_widget_set_vexpand (win, TRUE);
|
||||||
|
cv_add_scroll_events (win);
|
||||||
|
|
||||||
/*gtk_container_set_border_width (GTK_CONTAINER (win), 1);*/
|
/*gtk_container_set_border_width (GTK_CONTAINER (win), 1);*/
|
||||||
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (win),
|
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (win),
|
||||||
@@ -154,6 +155,7 @@ cv_tree_init (chanview *cv)
|
|||||||
view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (cv->store));
|
view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (cv->store));
|
||||||
gtk_widget_set_hexpand (view, TRUE);
|
gtk_widget_set_hexpand (view, TRUE);
|
||||||
gtk_widget_set_vexpand (view, TRUE);
|
gtk_widget_set_vexpand (view, TRUE);
|
||||||
|
cv_add_scroll_events (view);
|
||||||
gtk_widget_set_name (view, "zoitechat-tree");
|
gtk_widget_set_name (view, "zoitechat-tree");
|
||||||
{
|
{
|
||||||
ThemeWidgetStyleValues style_values;
|
ThemeWidgetStyleValues style_values;
|
||||||
|
|||||||
@@ -95,6 +95,37 @@ static chan *cv_find_chan_by_number (chanview *cv, int num);
|
|||||||
static int cv_find_number_of_chan (chanview *cv, chan *find_ch);
|
static int cv_find_number_of_chan (chanview *cv, chan *find_ch);
|
||||||
static void cv_find_neighbors_for_removal (chanview *cv, chan *find_ch, chan **left_ch, chan **first_ch);
|
static void cv_find_neighbors_for_removal (chanview *cv, chan *find_ch, chan **left_ch, chan **first_ch);
|
||||||
|
|
||||||
|
static void
|
||||||
|
cv_add_scroll_events (GtkWidget *widget)
|
||||||
|
{
|
||||||
|
gtk_widget_add_events (widget, GDK_SCROLL_MASK | GDK_SMOOTH_SCROLL_MASK);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
cv_scroll_direction (GdkEventScroll *event)
|
||||||
|
{
|
||||||
|
gdouble dx;
|
||||||
|
gdouble dy;
|
||||||
|
|
||||||
|
if (event->direction == GDK_SCROLL_SMOOTH && gdk_event_get_scroll_deltas ((GdkEvent *) event, &dx, &dy))
|
||||||
|
{
|
||||||
|
if (dy > 0)
|
||||||
|
return 1;
|
||||||
|
if (dy < 0)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (event->direction)
|
||||||
|
{
|
||||||
|
case GDK_SCROLL_DOWN:
|
||||||
|
return 1;
|
||||||
|
case GDK_SCROLL_UP:
|
||||||
|
return -1;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ======= TABS ======= */
|
/* ======= TABS ======= */
|
||||||
|
|
||||||
|
|||||||
@@ -1973,8 +1973,37 @@ replace_handle (GtkWidget *t)
|
|||||||
{
|
{
|
||||||
ptrdiff_t found_offset = found - text;
|
ptrdiff_t found_offset = found - text;
|
||||||
ptrdiff_t found_end_offset = found_offset + (ptrdiff_t) pop_len;
|
ptrdiff_t found_end_offset = found_offset + (ptrdiff_t) pop_len;
|
||||||
|
gboolean start_ok;
|
||||||
|
gboolean end_ok;
|
||||||
int rank;
|
int rank;
|
||||||
ptrdiff_t distance;
|
ptrdiff_t distance;
|
||||||
|
const char *before = found;
|
||||||
|
const char *after = found + pop_len;
|
||||||
|
|
||||||
|
if (before > text)
|
||||||
|
{
|
||||||
|
before = g_utf8_find_prev_char (text, before);
|
||||||
|
start_ok = !before || (!g_unichar_isalnum (g_utf8_get_char (before)) && g_utf8_get_char (before) != '_');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
start_ok = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*after != '\0')
|
||||||
|
{
|
||||||
|
end_ok = !g_unichar_isalnum (g_utf8_get_char (after)) && g_utf8_get_char (after) != '_';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
end_ok = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!start_ok || !end_ok)
|
||||||
|
{
|
||||||
|
found++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (cursor_byte_offset >= found_offset && cursor_byte_offset <= found_end_offset)
|
if (cursor_byte_offset >= found_offset && cursor_byte_offset <= found_end_offset)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2412,9 +2412,9 @@ mg_userlist_button (GtkWidget * box, char *label, char *cmd,
|
|||||||
g_signal_connect (G_OBJECT (wid), "clicked",
|
g_signal_connect (G_OBJECT (wid), "clicked",
|
||||||
G_CALLBACK (userlist_button_cb), cmd);
|
G_CALLBACK (userlist_button_cb), cmd);
|
||||||
gtk_widget_set_hexpand (wid, TRUE);
|
gtk_widget_set_hexpand (wid, TRUE);
|
||||||
gtk_widget_set_vexpand (wid, TRUE);
|
gtk_widget_set_vexpand (wid, FALSE);
|
||||||
gtk_widget_set_halign (wid, GTK_ALIGN_FILL);
|
gtk_widget_set_halign (wid, GTK_ALIGN_FILL);
|
||||||
gtk_widget_set_valign (wid, GTK_ALIGN_FILL);
|
gtk_widget_set_valign (wid, GTK_ALIGN_CENTER);
|
||||||
gtk_grid_attach (GTK_GRID (box), wid, a, c, b - a, d - c);
|
gtk_grid_attach (GTK_GRID (box), wid, a, c, b - a, d - c);
|
||||||
show_and_unfocus (wid);
|
show_and_unfocus (wid);
|
||||||
}
|
}
|
||||||
@@ -3413,8 +3413,13 @@ mg_create_textarea (session *sess, GtkWidget *box)
|
|||||||
inbox = mg_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 2);
|
inbox = mg_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 2);
|
||||||
gtk_box_pack_start (GTK_BOX (vbox), inbox, TRUE, TRUE, 0);
|
gtk_box_pack_start (GTK_BOX (vbox), inbox, TRUE, TRUE, 0);
|
||||||
|
|
||||||
frame = gtk_frame_new (NULL);
|
frame = gtk_scrolled_window_new (NULL, NULL);
|
||||||
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
|
gtk_widget_set_hexpand (frame, TRUE);
|
||||||
|
gtk_widget_set_vexpand (frame, TRUE);
|
||||||
|
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (frame),
|
||||||
|
GTK_SHADOW_IN);
|
||||||
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (frame),
|
||||||
|
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
|
||||||
gtk_box_pack_start (GTK_BOX (inbox), frame, TRUE, TRUE, 0);
|
gtk_box_pack_start (GTK_BOX (inbox), frame, TRUE, TRUE, 0);
|
||||||
|
|
||||||
theme_get_xtext_colors_for_widget (frame, xtext_palette, XTEXT_COLS);
|
theme_get_xtext_colors_for_widget (frame, xtext_palette, XTEXT_COLS);
|
||||||
@@ -3431,9 +3436,7 @@ mg_create_textarea (session *sess, GtkWidget *box)
|
|||||||
g_signal_connect (G_OBJECT (xtext), "word_click",
|
g_signal_connect (G_OBJECT (xtext), "word_click",
|
||||||
G_CALLBACK (mg_word_clicked), NULL);
|
G_CALLBACK (mg_word_clicked), NULL);
|
||||||
|
|
||||||
gui->vscrollbar = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL,
|
gui->vscrollbar = gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW (frame));
|
||||||
GTK_XTEXT (xtext)->adj);
|
|
||||||
gtk_box_pack_start (GTK_BOX (inbox), gui->vscrollbar, FALSE, TRUE, 0);
|
|
||||||
|
|
||||||
gtk_drag_dest_set (gui->vscrollbar, 5, dnd_dest_targets, 2,
|
gtk_drag_dest_set (gui->vscrollbar, 5, dnd_dest_targets, 2,
|
||||||
GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_LINK);
|
GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_LINK);
|
||||||
@@ -3476,7 +3479,7 @@ mg_create_meters (session_gui *gui, GtkWidget *parent_box)
|
|||||||
GtkWidget *infbox, *wid, *box;
|
GtkWidget *infbox, *wid, *box;
|
||||||
|
|
||||||
gui->meter_box = infbox = box = mg_box_new (GTK_ORIENTATION_VERTICAL, FALSE, 1);
|
gui->meter_box = infbox = box = mg_box_new (GTK_ORIENTATION_VERTICAL, FALSE, 1);
|
||||||
gtk_box_pack_start (GTK_BOX (parent_box), box, 0, 0, 0);
|
gtk_box_pack_end (GTK_BOX (parent_box), box, 0, 0, 0);
|
||||||
|
|
||||||
if ((prefs.hex_gui_lagometer & 2) || (prefs.hex_gui_throttlemeter & 2))
|
if ((prefs.hex_gui_lagometer & 2) || (prefs.hex_gui_throttlemeter & 2))
|
||||||
{
|
{
|
||||||
@@ -3661,8 +3664,14 @@ mg_create_userlist (session_gui *gui, GtkWidget *box)
|
|||||||
gtk_box_pack_start (GTK_BOX (box), vbox, TRUE, TRUE, 0);
|
gtk_box_pack_start (GTK_BOX (box), vbox, TRUE, TRUE, 0);
|
||||||
|
|
||||||
gui->namelistinfo = gtk_label_new (NULL);
|
gui->namelistinfo = gtk_label_new (NULL);
|
||||||
gtk_label_set_xalign (GTK_LABEL (gui->namelistinfo), 0.0f);
|
gtk_label_set_xalign (GTK_LABEL (gui->namelistinfo), 0.5f);
|
||||||
gtk_widget_set_halign (gui->namelistinfo, GTK_ALIGN_START);
|
gtk_label_set_justify (GTK_LABEL (gui->namelistinfo), GTK_JUSTIFY_CENTER);
|
||||||
|
gtk_label_set_ellipsize (GTK_LABEL (gui->namelistinfo), PANGO_ELLIPSIZE_END);
|
||||||
|
gtk_label_set_width_chars (GTK_LABEL (gui->namelistinfo), 1);
|
||||||
|
gtk_widget_set_margin_start (gui->namelistinfo, 0);
|
||||||
|
gtk_widget_set_margin_end (gui->namelistinfo, 0);
|
||||||
|
gtk_widget_set_hexpand (gui->namelistinfo, TRUE);
|
||||||
|
gtk_widget_set_halign (gui->namelistinfo, GTK_ALIGN_FILL);
|
||||||
if (prefs.hex_gui_ulist_count)
|
if (prefs.hex_gui_ulist_count)
|
||||||
gtk_box_pack_start (GTK_BOX (vbox), gui->namelistinfo, 0, 0, 0);
|
gtk_box_pack_start (GTK_BOX (vbox), gui->namelistinfo, 0, 0, 0);
|
||||||
|
|
||||||
|
|||||||
@@ -93,23 +93,14 @@ userlist_apply_saved_column_width (GtkTreeViewColumn *column, int width)
|
|||||||
static void
|
static void
|
||||||
userlist_update_min_width (session *sess)
|
userlist_update_min_width (session *sess)
|
||||||
{
|
{
|
||||||
GtkRequisition minimum;
|
|
||||||
GtkRequisition natural;
|
|
||||||
GtkWidget *scrolled_window;
|
GtkWidget *scrolled_window;
|
||||||
int width;
|
|
||||||
|
|
||||||
if (!sess || !sess->gui || !sess->gui->user_box || !sess->gui->namelistinfo || !sess->gui->user_tree)
|
if (!sess || !sess->gui || !sess->gui->user_tree)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
gtk_widget_get_preferred_size (sess->gui->namelistinfo, &minimum, &natural);
|
|
||||||
width = MAX (minimum.width, natural.width);
|
|
||||||
if (width < 1)
|
|
||||||
width = 1;
|
|
||||||
|
|
||||||
scrolled_window = gtk_widget_get_parent (sess->gui->user_tree);
|
scrolled_window = gtk_widget_get_parent (sess->gui->user_tree);
|
||||||
if (GTK_IS_SCROLLED_WINDOW (scrolled_window))
|
if (GTK_IS_SCROLLED_WINDOW (scrolled_window))
|
||||||
gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW (scrolled_window), width);
|
gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW (scrolled_window), 1);
|
||||||
gtk_widget_set_size_request (sess->gui->user_box, width, -1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GdkPixbuf *
|
GdkPixbuf *
|
||||||
@@ -909,17 +900,19 @@ userlist_create (GtkWidget *box)
|
|||||||
};
|
};
|
||||||
|
|
||||||
sw = gtk_scrolled_window_new (NULL, NULL);
|
sw = gtk_scrolled_window_new (NULL, NULL);
|
||||||
|
gtk_widget_set_hexpand (sw, TRUE);
|
||||||
|
gtk_widget_set_vexpand (sw, TRUE);
|
||||||
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
|
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
|
||||||
GTK_SHADOW_ETCHED_IN);
|
GTK_SHADOW_IN);
|
||||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
||||||
prefs.hex_gui_ulist_show_hosts ?
|
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
||||||
GTK_POLICY_AUTOMATIC :
|
gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW (sw), 1);
|
||||||
GTK_POLICY_NEVER,
|
|
||||||
GTK_POLICY_AUTOMATIC);
|
|
||||||
gtk_box_pack_start (GTK_BOX (box), sw, TRUE, TRUE, 0);
|
gtk_box_pack_start (GTK_BOX (box), sw, TRUE, TRUE, 0);
|
||||||
gtk_widget_show (sw);
|
gtk_widget_show (sw);
|
||||||
|
|
||||||
treeview = gtk_tree_view_new ();
|
treeview = gtk_tree_view_new ();
|
||||||
|
gtk_widget_set_hexpand (treeview, TRUE);
|
||||||
|
gtk_widget_set_vexpand (treeview, TRUE);
|
||||||
gtk_widget_set_name (treeview, "zoitechat-userlist");
|
gtk_widget_set_name (treeview, "zoitechat-userlist");
|
||||||
gtk_widget_set_can_focus (treeview, TRUE);
|
gtk_widget_set_can_focus (treeview, TRUE);
|
||||||
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
|
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
|
||||||
|
|||||||
@@ -110,6 +110,15 @@ enum
|
|||||||
TARGET_COMPOUND_TEXT
|
TARGET_COMPOUND_TEXT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
PROP_0,
|
||||||
|
PROP_HADJUSTMENT,
|
||||||
|
PROP_VADJUSTMENT,
|
||||||
|
PROP_HSCROLL_POLICY,
|
||||||
|
PROP_VSCROLL_POLICY
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/* Selection targets for PRIMARY selection / copy-paste.
|
/* Selection targets for PRIMARY selection / copy-paste.
|
||||||
*
|
*
|
||||||
@@ -158,7 +167,8 @@ gtk_xtext_install_selection_targets (GtkWidget *widget)
|
|||||||
|
|
||||||
static guint xtext_signals[LAST_SIGNAL];
|
static guint xtext_signals[LAST_SIGNAL];
|
||||||
|
|
||||||
G_DEFINE_TYPE (GtkXText, gtk_xtext, GTK_TYPE_WIDGET)
|
G_DEFINE_TYPE_WITH_CODE (GtkXText, gtk_xtext, GTK_TYPE_WIDGET,
|
||||||
|
G_IMPLEMENT_INTERFACE (GTK_TYPE_SCROLLABLE, NULL))
|
||||||
|
|
||||||
char *nocasestrstr (const char *text, const char *tofind); /* util.c */
|
char *nocasestrstr (const char *text, const char *tofind); /* util.c */
|
||||||
int xtext_get_stamp_str (time_t, char **);
|
int xtext_get_stamp_str (time_t, char **);
|
||||||
@@ -168,9 +178,13 @@ static gboolean gtk_xtext_is_selecting (GtkXText *xtext);
|
|||||||
static char *gtk_xtext_selection_get_text (GtkXText *xtext, int *len_ret);
|
static char *gtk_xtext_selection_get_text (GtkXText *xtext, int *len_ret);
|
||||||
static textentry *gtk_xtext_nth (GtkXText *xtext, int line, int *subline);
|
static textentry *gtk_xtext_nth (GtkXText *xtext, int line, int *subline);
|
||||||
static void gtk_xtext_adjustment_changed (GtkAdjustment * adj,
|
static void gtk_xtext_adjustment_changed (GtkAdjustment * adj,
|
||||||
GtkXText * xtext);
|
GtkXText * xtext);
|
||||||
static void gtk_xtext_scroll_adjustments (GtkXText *xtext, GtkAdjustment *hadj,
|
static void gtk_xtext_scroll_adjustments (GtkXText *xtext, GtkAdjustment *hadj,
|
||||||
GtkAdjustment *vadj);
|
GtkAdjustment *vadj);
|
||||||
|
static void gtk_xtext_set_property (GObject *object, guint prop_id,
|
||||||
|
const GValue *value, GParamSpec *pspec);
|
||||||
|
static void gtk_xtext_get_property (GObject *object, guint prop_id,
|
||||||
|
GValue *value, GParamSpec *pspec);
|
||||||
static int gtk_xtext_render_ents (GtkXText * xtext, textentry *, textentry *);
|
static int gtk_xtext_render_ents (GtkXText * xtext, textentry *, textentry *);
|
||||||
static void gtk_xtext_recalc_widths (xtext_buffer *buf, int);
|
static void gtk_xtext_recalc_widths (xtext_buffer *buf, int);
|
||||||
static void gtk_xtext_fix_indent (xtext_buffer *buf);
|
static void gtk_xtext_fix_indent (xtext_buffer *buf);
|
||||||
@@ -794,6 +808,9 @@ gtk_xtext_init (GtkXText * xtext)
|
|||||||
xtext->recycle = FALSE;
|
xtext->recycle = FALSE;
|
||||||
xtext->dont_render = FALSE;
|
xtext->dont_render = FALSE;
|
||||||
xtext->dont_render2 = FALSE;
|
xtext->dont_render2 = FALSE;
|
||||||
|
xtext->hadj = NULL;
|
||||||
|
xtext->hscroll_policy = GTK_SCROLL_MINIMUM;
|
||||||
|
xtext->vscroll_policy = GTK_SCROLL_MINIMUM;
|
||||||
gtk_xtext_scroll_adjustments (xtext, NULL, NULL);
|
gtk_xtext_scroll_adjustments (xtext, NULL, NULL);
|
||||||
|
|
||||||
gtk_xtext_install_selection_targets (GTK_WIDGET (xtext));
|
gtk_xtext_install_selection_targets (GTK_WIDGET (xtext));
|
||||||
@@ -886,6 +903,66 @@ gtk_xtext_adjustment_changed (GtkAdjustment * adj, GtkXText * xtext)
|
|||||||
xtext->buffer->old_value = xtext_adj_get_value (adj);
|
xtext->buffer->old_value = xtext_adj_get_value (adj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_xtext_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
GtkXText *xtext = GTK_XTEXT (object);
|
||||||
|
GtkAdjustment *adj;
|
||||||
|
|
||||||
|
switch (prop_id)
|
||||||
|
{
|
||||||
|
case PROP_HADJUSTMENT:
|
||||||
|
adj = g_value_get_object (value);
|
||||||
|
if (xtext->hadj == adj)
|
||||||
|
break;
|
||||||
|
if (xtext->hadj)
|
||||||
|
g_object_unref (xtext->hadj);
|
||||||
|
xtext->hadj = adj ? g_object_ref (adj) : NULL;
|
||||||
|
g_object_notify (object, "hadjustment");
|
||||||
|
break;
|
||||||
|
case PROP_VADJUSTMENT:
|
||||||
|
gtk_xtext_scroll_adjustments (xtext, NULL, g_value_get_object (value));
|
||||||
|
g_object_notify (object, "vadjustment");
|
||||||
|
break;
|
||||||
|
case PROP_HSCROLL_POLICY:
|
||||||
|
xtext->hscroll_policy = g_value_get_enum (value);
|
||||||
|
g_object_notify (object, "hscroll-policy");
|
||||||
|
break;
|
||||||
|
case PROP_VSCROLL_POLICY:
|
||||||
|
xtext->vscroll_policy = g_value_get_enum (value);
|
||||||
|
g_object_notify (object, "vscroll-policy");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_xtext_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
GtkXText *xtext = GTK_XTEXT (object);
|
||||||
|
|
||||||
|
switch (prop_id)
|
||||||
|
{
|
||||||
|
case PROP_HADJUSTMENT:
|
||||||
|
g_value_set_object (value, xtext->hadj);
|
||||||
|
break;
|
||||||
|
case PROP_VADJUSTMENT:
|
||||||
|
g_value_set_object (value, xtext->adj);
|
||||||
|
break;
|
||||||
|
case PROP_HSCROLL_POLICY:
|
||||||
|
g_value_set_enum (value, xtext->hscroll_policy);
|
||||||
|
break;
|
||||||
|
case PROP_VSCROLL_POLICY:
|
||||||
|
g_value_set_enum (value, xtext->vscroll_policy);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
gtk_xtext_new (const XTextColor *palette, int separator)
|
gtk_xtext_new (const XTextColor *palette, int separator)
|
||||||
{
|
{
|
||||||
@@ -952,6 +1029,11 @@ gtk_xtext_cleanup (GtkXText *xtext)
|
|||||||
xtext->adj = NULL;
|
xtext->adj = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (xtext->hadj)
|
||||||
|
{
|
||||||
|
g_object_unref (G_OBJECT (xtext->hadj));
|
||||||
|
xtext->hadj = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (xtext->hand_cursor)
|
if (xtext->hand_cursor)
|
||||||
{
|
{
|
||||||
@@ -2924,6 +3006,13 @@ gtk_xtext_class_init (GtkXTextClass * class)
|
|||||||
widget_class = (GtkWidgetClass *) class;
|
widget_class = (GtkWidgetClass *) class;
|
||||||
xtext_class = (GtkXTextClass *) class;
|
xtext_class = (GtkXTextClass *) class;
|
||||||
|
|
||||||
|
object_class->set_property = gtk_xtext_set_property;
|
||||||
|
object_class->get_property = gtk_xtext_get_property;
|
||||||
|
g_object_class_override_property (object_class, PROP_HADJUSTMENT, "hadjustment");
|
||||||
|
g_object_class_override_property (object_class, PROP_VADJUSTMENT, "vadjustment");
|
||||||
|
g_object_class_override_property (object_class, PROP_HSCROLL_POLICY, "hscroll-policy");
|
||||||
|
g_object_class_override_property (object_class, PROP_VSCROLL_POLICY, "vscroll-policy");
|
||||||
|
|
||||||
xtext_signals[WORD_CLICK] =
|
xtext_signals[WORD_CLICK] =
|
||||||
g_signal_new ("word_click",
|
g_signal_new ("word_click",
|
||||||
G_TYPE_FROM_CLASS (object_class),
|
G_TYPE_FROM_CLASS (object_class),
|
||||||
@@ -4830,13 +4919,12 @@ gtk_xtext_check_marker_visibility (GtkXText * xtext)
|
|||||||
static void
|
static void
|
||||||
gtk_xtext_unstrip_color (gint start, gint end, GSList *slp, GList **gl, gint maxo)
|
gtk_xtext_unstrip_color (gint start, gint end, GSList *slp, GList **gl, gint maxo)
|
||||||
{
|
{
|
||||||
gint off1, off2, curlen;
|
gint off1, off2;
|
||||||
GSList *cursl;
|
GSList *cursl;
|
||||||
offsets_t marks;
|
offsets_t marks;
|
||||||
offlen_t *meta;
|
offlen_t *meta;
|
||||||
|
|
||||||
off1 = 0;
|
off1 = 0;
|
||||||
curlen = 0;
|
|
||||||
cursl = slp;
|
cursl = slp;
|
||||||
while (cursl)
|
while (cursl)
|
||||||
{
|
{
|
||||||
@@ -4846,7 +4934,6 @@ gtk_xtext_unstrip_color (gint start, gint end, GSList *slp, GList **gl, gint max
|
|||||||
off1 = meta->off + start;
|
off1 = meta->off + start;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
curlen += meta->len;
|
|
||||||
start -= meta->len;
|
start -= meta->len;
|
||||||
end -= meta->len;
|
end -= meta->len;
|
||||||
cursl = g_slist_next (cursl);
|
cursl = g_slist_next (cursl);
|
||||||
@@ -4861,7 +4948,6 @@ gtk_xtext_unstrip_color (gint start, gint end, GSList *slp, GList **gl, gint max
|
|||||||
off2 = meta->off + end;
|
off2 = meta->off + end;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
curlen += meta->len;
|
|
||||||
end -= meta->len;
|
end -= meta->len;
|
||||||
cursl = g_slist_next (cursl);
|
cursl = g_slist_next (cursl);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -134,6 +134,9 @@ struct _GtkXText
|
|||||||
xtext_buffer *selection_buffer;
|
xtext_buffer *selection_buffer;
|
||||||
|
|
||||||
GtkAdjustment *adj;
|
GtkAdjustment *adj;
|
||||||
|
GtkAdjustment *hadj;
|
||||||
|
GtkScrollablePolicy hscroll_policy;
|
||||||
|
GtkScrollablePolicy vscroll_policy;
|
||||||
cairo_surface_t *background_surface; /* 0 = use palette[19] */
|
cairo_surface_t *background_surface; /* 0 = use palette[19] */
|
||||||
cairo_surface_t *background_clip_surface;
|
cairo_surface_t *background_clip_surface;
|
||||||
GdkWindow *draw_window; /* points to ->window */
|
GdkWindow *draw_window; /* points to ->window */
|
||||||
|
|||||||
Reference in New Issue
Block a user