├── src ├── marshals.list ├── config.h.in ├── marshals.h ├── defines.h ├── accountinfopointer.h ├── dialogs.h ├── client_options.h ├── video │ ├── xrectsel.h │ ├── video_widget.h │ └── xrectsel.c ├── jami ├── profileview.h ├── utils │ ├── files.h │ └── drawing.h ├── main.cpp ├── native │ ├── dbuserrorhandler.h │ └── dbuserrorhandler.cpp ├── accountmigrationview.h ├── welcomeview.h ├── pluginsettingsview.h ├── generalsettingsview.h ├── mediasettingsview.h ├── client.h ├── usernameregistrationbox.h ├── messagingwidget.h ├── mainwindow.h ├── accountcreationwizard.h ├── newaccountsettingsview.h ├── conversationpopupmenu.h ├── notifier.h ├── conversationsview.h ├── chatview.h ├── incomingcallview.h ├── cc-crop-area.h ├── currentcallview.h ├── avatarmanipulation.h ├── client_options.c ├── marshals.cpp ├── webkitchatcontainer.h ├── dialogs.cpp └── profileview.cpp ├── web ├── README ├── fa.css ├── jed.js ├── emoji.js ├── chatview.js ├── emoji.css ├── linkify.js ├── chatview.css ├── chatview.html ├── linkify-html.js ├── qwebchannel.js ├── chatview-gnome.css ├── linkify-string.js ├── web.gresource.xml └── .eslintrc.json ├── .gitignore ├── pixmaps ├── qrcode-white.png ├── baseline-stop-24px.svg ├── stop-white.svg ├── view.svg ├── add-device.svg ├── baseline-send-24px.svg ├── ic_play_arrow_white_24px.svg ├── up_arrow.svg ├── send-white.svg ├── ic_add_black_24px.svg ├── ic_pause_white_24px.svg ├── add.svg ├── ic_fiber_manual_record_red_24px.svg ├── save.svg ├── revoke.svg ├── retry.svg ├── retry-white.svg ├── account.svg ├── reject.svg ├── ic_videocam_white_24px.svg ├── export.svg ├── devices.svg ├── ic_chat_white_24px.svg ├── edit.svg ├── more_vert-24px.svg ├── ic_question_answer_black_24px.svg ├── ic_question_answer_white_24px.svg ├── ic_person_add_black_24px.svg ├── ic_person_add_white_24px.svg ├── ic_video_call_black_24px.svg ├── baseline-exit_to_app-24px.svg ├── baseline-mic-24px.svg ├── ic_videocam_off_white_24px.svg ├── ic_mic_white_24px.svg ├── block_black.svg ├── block.svg ├── ic_history_black_24px.svg ├── accept.svg ├── ic_call_black_24px.svg ├── ic_high_quality_white_24px.svg ├── ic_people_black_24px.svg ├── ic_delete_forever_black_24px.svg ├── transfer.svg ├── ic_search_black_48px.svg ├── extension_white_24dp.svg ├── bottom_arrow.svg ├── ic_mic_off_white_24px.svg ├── ic_call_end_white_24px.svg ├── icons_Moderator_Black_24dp.svg ├── icons_Moderator_White_24dp.svg ├── settings.svg ├── groups-24px.svg ├── LICENSE ├── fallbackavatar.svg ├── baseline-mic-recording-24px.svg ├── ic_verified_user_black_24px_with_notification.svg ├── ic_verified_user_white_24px_with_notification.svg ├── pixmaps.gresource.xml ├── qrcode.svg └── dial.svg ├── sounds ├── ringtone_notify.wav ├── LICENSE └── sounds.gresource.xml ├── .gitreview ├── .tx └── config ├── doc ├── Doxyfile.in └── jami-gnome.1 ├── jami-gnome.desktop.autostart ├── jami-gnome.desktop ├── ui ├── webkitchatcontainer.ui ├── gearsmenu.ui ├── ui.gresource.xml ├── usernameregistrationbox.ui ├── chatview.ui └── messagingwidget.ui ├── AUTHORS ├── scripts └── generate_version.sh ├── po ├── README └── POTFILES.in ├── .gitlab └── issue_templates │ └── Bug.md ├── cmake ├── cmake_uninstall.cmake.in ├── GResources.cmake └── GSettings.cmake ├── CONTRIBUTING.md ├── README.md ├── data └── net.jami.Jami.gschema.xml └── jami-gnome.appdata.xml /src/marshals.list: -------------------------------------------------------------------------------- 1 | VOID:STRING,STRING -------------------------------------------------------------------------------- /web/README: -------------------------------------------------------------------------------- 1 | ../../lrc/src/web-chatview/README -------------------------------------------------------------------------------- /web/fa.css: -------------------------------------------------------------------------------- 1 | ../../lrc/src/web-chatview/fa.css -------------------------------------------------------------------------------- /web/jed.js: -------------------------------------------------------------------------------- 1 | ../../lrc/src/web-chatview/jed.js -------------------------------------------------------------------------------- /web/emoji.js: -------------------------------------------------------------------------------- 1 | ../../lrc/src/web-chatview/emoji.js -------------------------------------------------------------------------------- /web/chatview.js: -------------------------------------------------------------------------------- 1 | ../../lrc/src/web-chatview/chatview.js -------------------------------------------------------------------------------- /web/emoji.css: -------------------------------------------------------------------------------- 1 | ../../lrc/src/web-chatview/emoji.css -------------------------------------------------------------------------------- /web/linkify.js: -------------------------------------------------------------------------------- 1 | ../../lrc/src/web-chatview/linkify.js -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | build-local/ 3 | doc/Doxyfile 4 | -------------------------------------------------------------------------------- /web/chatview.css: -------------------------------------------------------------------------------- 1 | ../../lrc/src/web-chatview/chatview.css -------------------------------------------------------------------------------- /web/chatview.html: -------------------------------------------------------------------------------- 1 | ../../lrc/src/web-chatview/chatview.html -------------------------------------------------------------------------------- /web/linkify-html.js: -------------------------------------------------------------------------------- 1 | ../../lrc/src/web-chatview/linkify-html.js -------------------------------------------------------------------------------- /web/qwebchannel.js: -------------------------------------------------------------------------------- 1 | ../../lrc/src/web-chatview/qwebchannel.js -------------------------------------------------------------------------------- /web/chatview-gnome.css: -------------------------------------------------------------------------------- 1 | ../../lrc/src/web-chatview/chatview-gnome.css -------------------------------------------------------------------------------- /web/linkify-string.js: -------------------------------------------------------------------------------- 1 | ../../lrc/src/web-chatview/linkify-string.js -------------------------------------------------------------------------------- /web/web.gresource.xml: -------------------------------------------------------------------------------- 1 | ../../lrc/src/web-chatview/web.gresource.xml -------------------------------------------------------------------------------- /pixmaps/qrcode-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/savoirfairelinux/jami-client-gnome/HEAD/pixmaps/qrcode-white.png -------------------------------------------------------------------------------- /sounds/ringtone_notify.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/savoirfairelinux/jami-client-gnome/HEAD/sounds/ringtone_notify.wav -------------------------------------------------------------------------------- /.gitreview: -------------------------------------------------------------------------------- 1 | [gerrit] 2 | host=review.jami.net 3 | port=29420 4 | project=jami-client-gnome 5 | defaultremote=origin 6 | defaultbranch=master 7 | -------------------------------------------------------------------------------- /sounds/LICENSE: -------------------------------------------------------------------------------- 1 | ringtone_notify.wav: 2 | https://creativecommons.org/licenses/by-sa/4.0/ 3 | made by Andreas Traczyk andreas.traczyk@savoifairelinux.com 4 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | 4 | [jami.ring-client-gnomepot] 5 | file_filter = po/.po 6 | source_file = po/ring-client-gnome.pot 7 | source_lang = en 8 | type = PO -------------------------------------------------------------------------------- /pixmaps/baseline-stop-24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /sounds/sounds.gresource.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ringtone_notify.wav 5 | 6 | 7 | -------------------------------------------------------------------------------- /pixmaps/stop-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/view.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pixmaps/add-device.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/baseline-send-24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/ic_play_arrow_white_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/up_arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/send-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/ic_add_black_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pixmaps/ic_pause_white_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/ic_fiber_manual_record_red_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/save.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/revoke.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/retry.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pixmaps/retry-white.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pixmaps/account.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/reject.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/ic_videocam_white_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/export.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/devices.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/ic_chat_white_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/edit.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/more_vert-24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /pixmaps/ic_question_answer_black_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pixmaps/ic_question_answer_white_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pixmaps/ic_person_add_black_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pixmaps/ic_person_add_white_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pixmaps/ic_video_call_black_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pixmaps/baseline-exit_to_app-24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/baseline-mic-24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/ic_videocam_off_white_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/ic_mic_white_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/block_black.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/block.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/ic_history_black_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pixmaps/accept.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/ic_call_black_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pixmaps/ic_high_quality_white_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/ic_people_black_24px.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pixmaps/ic_delete_forever_black_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /doc/Doxyfile.in: -------------------------------------------------------------------------------- 1 | PROJECT_NAME = "@CMAKE_PROJECT_NAME@" 2 | PROJECT_NUMBER = @PROJECT_VERSION@ 3 | INPUT = @PROJECT_SOURCE_DIR@ 4 | RECURSIVE = YES 5 | EXCLUDE = @PROJECT_BINARY_DIR@ 6 | FILE_PATTERNS = *.cpp *.h *.c *.md 7 | INPUT_ENCODING = UTF-8 8 | USE_MDFILE_AS_MAINPAGE = @PROJECT_SOURCE_DIR@/doc/README.md 9 | EXTRACT_ALL = YES 10 | EXTRACT_LOCAL_CLASSES = YES 11 | -------------------------------------------------------------------------------- /pixmaps/transfer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/ic_search_black_48px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/extension_white_24dp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pixmaps/bottom_arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /pixmaps/ic_mic_off_white_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pixmaps/ic_call_end_white_24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /jami-gnome.desktop.autostart: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Jami (GNOME client) 3 | Name[hu]=Jami (GNOME-ügyfél) 4 | GenericName=Jami (GNOME client) 5 | GenericName[hu]=Jami (GNOME-ügyfél) 6 | Comment=Privacy-oriented voice, video, chat, and conference platform 7 | Comment[hu]=Adatvédelem-orientált hang-, video-, csevegés- és konferenciaplatform 8 | Comment[ru]=Jami — приложение для защищённой связи с распределённой архитектурой 9 | Exec=jami-gnome --restore-last-window-state 10 | Icon=jami-gnome 11 | StartupNotify=true 12 | Terminal=false 13 | Type=Application 14 | Categories=GNOME;GTK;Network;Telephony; 15 | -------------------------------------------------------------------------------- /jami-gnome.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Jami (GNOME client) 3 | Name[hu]=Jami (GNOME-ügyfél) 4 | GenericName=Jami (GNOME client) 5 | GenericName[hu]=Jami (GNOME-ügyfél) 6 | Comment=Privacy-oriented voice, video, chat, and conference platform 7 | Comment[hu]=Adatvédelem-orientált hang-, video-, csevegés- és konferenciaplatform 8 | Comment[ru]=Jami — приложение для защищённой связи с распределённой архитектурой 9 | Exec=jami-gnome %u 10 | Icon=jami-gnome 11 | StartupNotify=true 12 | Terminal=false 13 | Type=Application 14 | Categories=GNOME;GTK;Network;Telephony; 15 | Keywords=chat;talk;im;message;voip; 16 | -------------------------------------------------------------------------------- /ui/webkitchatcontainer.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 15 | 16 | -------------------------------------------------------------------------------- /pixmaps/icons_Moderator_Black_24dp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /pixmaps/icons_Moderator_White_24dp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Authors 2 | --------------- 3 | 4 | Adrien Béraud 5 | Alexandre Lision 6 | Edric Milaret 7 | Éloi Bail 8 | Emmanuel Lepage 9 | Guillaume Roguez 10 | Stepan Salenikovich 11 | 12 | Based on the SFLPhone project. 13 | 14 | Artists 15 | --------------- 16 | 17 | Marianne Forget -------------------------------------------------------------------------------- /web/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true 4 | }, 5 | "plugins": ["html"], 6 | "extends": "eslint:recommended", 7 | "parserOptions": { 8 | "ecmaVersion": 6 9 | }, 10 | "rules": { 11 | "indent": [ 12 | "error", 13 | 4 14 | ], 15 | "linebreak-style": [ 16 | "error", 17 | "unix" 18 | ], 19 | "quotes": [ 20 | "error", 21 | "double" 22 | ], 23 | "semi": [ 24 | "error", 25 | "never" 26 | ], 27 | "no-inner-declarations": [ 28 | 0 29 | ] 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /doc/jami-gnome.1: -------------------------------------------------------------------------------- 1 | .\" Manpage for jami-gnome. 2 | .TH man 8 "08 April 2016" "1.0" "jami-gnome man page" 3 | .SH NAME 4 | jami-gnome \- Gnome client for jami.net 5 | .SH SYNOPSIS 6 | jami-gnome [options] 7 | .SH DESCRIPTION 8 | jami-gnome is a gnome client for jami.net 9 | .SH OPTIONS 10 | .B \-v, \-\-version 11 | Display the version and exit. 12 | .TP 13 | .B \-d, \-\-debug 14 | Enable debug. 15 | .TP 16 | .B \-r, \-\-restore-last-window-state 17 | Restores the hidden state of the main window. This is only applicable to the primary instance. 18 | .TP 19 | .B \-h, \-\-help 20 | Display help text and exit. 21 | .SH SEE ALSO 22 | jamid(1) 23 | .SH AUTHOR 24 | Alexandre Viau (alexandre.viau@savoirfairelinux.net) 25 | -------------------------------------------------------------------------------- /src/config.h.in: -------------------------------------------------------------------------------- 1 | /* cmake will generate config.h with defines containing the values defined in cmake */ 2 | 3 | #define VERSION "@PROJECT_VERSION@" 4 | 5 | #define USE_LIBNOTIFY @USE_LIBNOTIFY@ 6 | #define HAVE_APPINDICATOR @HAVE_APPINDICATOR@ 7 | #define HAVE_AYATANAAPPINDICATOR @HAVE_AYATANAAPPINDICATOR@ 8 | #define USE_LIBNM @USE_LIBNM@ 9 | #define USE_CANBERRA @USE_CANBERRA@ 10 | 11 | #define JAMI_CLIENT_NAME "Jami" 12 | #define JAMI_CLIENT_APP_ID "net.jami.Jami" 13 | 14 | #define JAMI_CLIENT_INSTALL "@JAMI_INSTALL_PREFIX@" 15 | #define JAMI_DATA_DIR "/share/jami-gnome" 16 | 17 | #define PACKAGE_NAME "@PROJECT_NAME@" 18 | #define LOCALEDIR "@JAMI_INSTALL_PREFIX@/share/locale" 19 | #define SOUNDSDIR "@JAMI_INSTALL_PREFIX@/share/sounds/jami-gnome" 20 | -------------------------------------------------------------------------------- /pixmaps/settings.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /scripts/generate_version.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | branch_name=$1 # (release/yyyymm) 4 | if [ "x${git_cmd}" != "x" ]; then 5 | echo "git not available!" # fallback to development 6 | exit 1 7 | fi 8 | if [[ ${branch_name} = release/* ]]; then 9 | git_cmd=$(which git) 10 | 11 | major_nb=$(echo ${branch_name} | /bin/grep -Po '\d{4}') 12 | minor_nb=$(echo ${branch_name} | /bin/grep -Po '\d{2}$') 13 | patch_nb=$(git rev-list --count ${branch_name} ^master) 14 | if [ "x${major_nb}" != "x" ] && [ "x${minor_nb}" != "x" ] && [ "x${patch_nb}" != "x" ]; then 15 | echo "${major_nb}.${minor_nb}.${patch_nb}" > version.txt 16 | else 17 | echo "Incorrect version!" 18 | exit 1 19 | fi 20 | else 21 | echo $(git rev-parse HEAD) > version.txt 22 | fi 23 | exit 0 24 | -------------------------------------------------------------------------------- /ui/gearsmenu.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | Keyboard _Shortcuts 8 | app.show_shortcuts 9 | 10 | 11 | _About 12 | app.about 13 | 14 |
15 |
16 | 17 | _Quit 18 | app.quit 19 | <Ctrl>Q 20 | 21 |
22 |
23 |
24 | -------------------------------------------------------------------------------- /pixmaps/groups-24px.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pixmaps/LICENSE: -------------------------------------------------------------------------------- 1 | Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ 2 | 3 | Files: ic_history_black_24px.svg 4 | ic_people_black_24px.svg 5 | ic_question_answer_black_24px.svg 6 | Copyright: 2014-2017 Material Design Authors 7 | License: Apache-2.0 8 | 9 | License: Apache-2.0 10 | Licensed under the Apache License, Version 2.0 (the "License"); 11 | you may not use this file except in compliance with the License. 12 | You may obtain a copy of the License at 13 | . 14 | http://www.apache.org/licenses/LICENSE-2.0 15 | . 16 | Unless required by applicable law or agreed to in writing, software 17 | distributed under the License is distributed on an "AS IS" BASIS, 18 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 | See the License for the specific language governing permissions and 20 | limitations under the License. 21 | -------------------------------------------------------------------------------- /src/marshals.h: -------------------------------------------------------------------------------- 1 | /* This file is generated by glib-genmarshal, do not modify it. This code is licensed under the same license as the containing project. Note that it links to GLib, so must comply with the LGPL linking clauses. */ 2 | #ifndef __G_CCLOSURE_USER_MARSHAL_MARSHAL_H__ 3 | #define __G_CCLOSURE_USER_MARSHAL_MARSHAL_H__ 4 | 5 | #include 6 | 7 | G_BEGIN_DECLS 8 | 9 | /* VOID:STRING,STRING (marshallers.list:1) */ 10 | extern 11 | void g_cclosure_user_marshal_VOID__STRING_STRING (GClosure *closure, 12 | GValue *return_value, 13 | guint n_param_values, 14 | const GValue *param_values, 15 | gpointer invocation_hint, 16 | gpointer marshal_data); 17 | 18 | 19 | G_END_DECLS 20 | 21 | #endif /* __G_CCLOSURE_USER_MARSHAL_MARSHAL_H__ */ 22 | -------------------------------------------------------------------------------- /src/defines.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Stepan Salenikovich 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | #ifndef __DEFINES_H__ 21 | 22 | #define BUTTON_RIGHT_CLICK 3 23 | 24 | #endif /* __DEFINES_H__ */ 25 | -------------------------------------------------------------------------------- /src/accountinfopointer.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2018-2022 Savoir-faire Linux Inc. 3 | * Author: Hugo Lefeuvre 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | namespace lrc 21 | { 22 | namespace api 23 | { 24 | namespace account 25 | { 26 | struct Info; 27 | } 28 | } 29 | } 30 | 31 | typedef const lrc::api::account::Info* AccountInfoPointer; 32 | -------------------------------------------------------------------------------- /src/dialogs.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Stepan Salenikovich 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | #ifndef _DIALOGS_H 21 | #define _DIALOGS_H 22 | 23 | #include 24 | 25 | G_BEGIN_DECLS 26 | 27 | void about_dialog(GtkWidget *parent); 28 | 29 | G_END_DECLS 30 | 31 | #endif /* _DIALOGS_H */ 32 | -------------------------------------------------------------------------------- /po/README: -------------------------------------------------------------------------------- 1 | Translation guide: 2 | 3 | The client uses gettext for translations, for a comprehensive guide see: 4 | http://www.gnu.org/software/gettext/manual/gettext.htm 5 | 6 | In order to generate the .pot (template) file with all the translation strings, 7 | append all the filenames that require translation to POTFILES.in, then run the 8 | following command: 9 | xgettext -o ring-client-gnome.pot --keyword=_ --keyword=C_:1c,2 --keyword=N_ -D .. -f POTFILES.in 10 | 11 | Replace the first 3 lines of the generated header with: 12 | # Gettext PO translation template file for the GNOME client of the Ring project. 13 | # Copyright (C) 2015-2022 Savoir-faire Linux Inc. 14 | # This file is distributed under the same license as the Ring package. 15 | 16 | The translation files are expected to be located in the /po dir using the 17 | following naming convention: 18 | [_].po 19 | for example: fr_CA.po, lt.po 20 | 21 | The Ring project uses Transifex.com to facilitate the translation process. The 22 | project page can be found here: 23 | https://www.transifex.com/savoirfairelinux/ring 24 | 25 | To pull translations from transifex using the tx client, execute: 26 | tx pull -fa --minimum-perc 1 27 | -------------------------------------------------------------------------------- /src/client_options.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2013-2022 Savoir-faire Linux Inc. 3 | * Author: Tristan Matthews 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | #ifndef CLIENT_OPTIONS_H_ 21 | #define CLIENT_OPTIONS_H_ 22 | 23 | #include 24 | 25 | G_BEGIN_DECLS 26 | 27 | #if GLIB_CHECK_VERSION(2,40,0) 28 | void client_add_options(GApplication *app); 29 | #else 30 | GOptionContext *client_options_get_context(void); 31 | #endif 32 | 33 | G_END_DECLS 34 | 35 | #endif /* CLIENT_OPTIONS_H_ */ 36 | -------------------------------------------------------------------------------- /src/video/xrectsel.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This code is based and adapted from: 3 | * https://github.com/lolilolicon/FFcast2/blob/master/xrectsel.c 4 | * 5 | * now located at: 6 | * https://github.com/lolilolicon/xrectsel/blob/master/xrectsel.c 7 | * 8 | * xrectsel.c -- print the geometry of a rectangular screen region. 9 | * Copyright (C) 2011-2014 lolilolicon 10 | * This program is free software: you can redistribute it and/or modify 11 | * it under the terms of the GNU General Public License as published by 12 | * the Free Software Foundation, either version 3 of the License, or 13 | * (at your option) any later version. 14 | * This program is distributed in the hope that it will be useful, 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | * GNU General Public License for more details. 18 | * You should have received a copy of the GNU General Public License 19 | * along with this program. If not, see . 20 | */ 21 | 22 | #ifndef __XRECTSEL_H__ 23 | #define __XRECTSEL_H__ 24 | 25 | G_BEGIN_DECLS 26 | 27 | void xrectsel(unsigned *x_sel, unsigned *y_sel, unsigned *w_sel, unsigned *h_sel); 28 | 29 | G_END_DECLS 30 | 31 | #endif /* __XRECTSEL_H__ */ -------------------------------------------------------------------------------- /po/POTFILES.in: -------------------------------------------------------------------------------- 1 | ui/help-overlay.ui 2 | ui/mainwindow.ui 3 | ui/accountmigrationview.ui 4 | ui/currentcallview.ui 5 | ui/accountcreationwizard.ui 6 | ui/gearsmenu.ui 7 | ui/generalsettingsview.ui 8 | ui/profile.ui 9 | ui/mediasettingsview.ui 10 | ui/newaccountsettingsview.ui 11 | ui/usernameregistrationbox.ui 12 | ui/webkitchatcontainer.ui 13 | ui/pluginsettingsview.ui 14 | ui/chatview.ui 15 | ui/messagingwidget.ui 16 | ui/incomingcallview.ui 17 | ui/avatarmanipulation.ui 18 | src/conversationsview.cpp 19 | src/mediasettingsview.cpp 20 | src/marshals.cpp 21 | src/pluginsettingsview.cpp 22 | src/usernameregistrationbox.cpp 23 | src/generalsettingsview.cpp 24 | src/utils/files.cpp 25 | src/utils/drawing.cpp 26 | src/welcomeview.cpp 27 | src/notifier.cpp 28 | src/video/video_widget.cpp 29 | src/video/xrectsel.c 30 | src/avatarmanipulation.cpp 31 | src/messagingwidget.cpp 32 | src/cc-crop-area.c 33 | src/main.cpp 34 | src/dialogs.cpp 35 | src/native/dbuserrorhandler.cpp 36 | src/client_options.c 37 | src/incomingcallview.cpp 38 | src/conversationpopupmenu.cpp 39 | src/profileview.cpp 40 | src/accountcreationwizard.cpp 41 | src/mainwindow.cpp 42 | src/chatview.cpp 43 | src/webkitchatcontainer.cpp 44 | src/client.cpp 45 | src/accountmigrationview.cpp 46 | src/currentcallview.cpp 47 | src/newaccountsettingsview.cpp 48 | -------------------------------------------------------------------------------- /ui/ui.gresource.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | mainwindow.ui 5 | gearsmenu.ui 6 | incomingcallview.ui 7 | currentcallview.ui 8 | accountcreationwizard.ui 9 | accountmigrationview.ui 10 | newaccountsettingsview.ui 11 | mediasettingsview.ui 12 | pluginsettingsview.ui 13 | generalsettingsview.ui 14 | chatview.ui 15 | messagingwidget.ui 16 | avatarmanipulation.ui 17 | webkitchatcontainer.ui 18 | usernameregistrationbox.ui 19 | help-overlay.ui 20 | profile.ui 21 | 22 | 23 | -------------------------------------------------------------------------------- /pixmaps/fallbackavatar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/jami: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Copyright (C) 2015-2022 Savoir-faire Linux Inc. 4 | # Author: Emmanuel Lepage Vallee 5 | # Author: Stepan Salenikovich 6 | # Author: Albert Babí 7 | # Author: Maxim Cournoyer 8 | # 9 | # This program is free software; you can redistribute it and/or modify 10 | # it under the terms of the GNU General Public License as published by 11 | # the Free Software Foundation; either version 3 of the License, or 12 | # (at your option) any later version. 13 | # 14 | # This program is distributed in the hope that it will be useful, 15 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | # GNU General Public License for more details. 18 | # 19 | # You should have received a copy of the GNU General Public License 20 | # along with this program; if not, write to the Free Software 21 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 22 | # 23 | 24 | if command -v jami-qt > /dev/null; then 25 | exec jami-qt "$@" 26 | elif command -v jami-gnome > /dev/null; then 27 | exec jami-gnome "$@" 28 | else 29 | echo "Jami not found" > /dev/error 30 | exit 1 31 | fi 32 | -------------------------------------------------------------------------------- /.gitlab/issue_templates/Bug.md: -------------------------------------------------------------------------------- 1 | Bug report form 2 | --------------- 3 | 4 | ## OS 5 | 6 | 7 | 8 | ## Jami daemon version: 9 | 10 | 11 | 12 | ## Jami GNOME client version: 13 | 14 | 15 | 16 | ## Where did you get Jami? 17 | 18 | 19 | 20 | - [x] My OS package manager (e.g. apt, yum, pacman) 21 | - [ ] I downloaded it from jami.net 22 | - [ ] I built it from source using the build.py script 23 | - [ ] I built it from source manually or other (please explain): 24 | 25 | ## Steps to reproduce bug 26 | 27 | 30 | 31 | Steps: 32 | 33 | 1. 34 | 35 | 2. 36 | 37 | ## What you expect to happen: 38 | 39 | ## What happens instead: 40 | 41 | ## Logs 42 | 43 | 48 | 49 | ## Additional information 50 | 51 | 54 | 55 | For more information about getting logs, see 56 | https://git.jami.net/savoirfairelinux/ring-project/wikis/tutorials/Bug-report-guide#logs. 57 | -------------------------------------------------------------------------------- /src/profileview.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Sebastien Blin 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include 23 | #include 24 | 25 | #include "accountinfopointer.h" 26 | 27 | #define PROFILE_VIEW_TYPE (profile_view_get_type ()) 28 | #define IS_PROFILE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PROFILE_VIEW_TYPE)) 29 | #define IS_PROFILE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PROFILE_VIEW_TYPE)) 30 | 31 | G_DECLARE_FINAL_TYPE (ProfileView, profile_view, PROFILE, VIEW, GtkDialog) 32 | 33 | GtkWidget* profile_view_new(AccountInfoPointer const & accountInfo, const QString& uid); -------------------------------------------------------------------------------- /src/utils/files.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Stepan Salenikovich 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | #ifndef _FILES_H 21 | #define _FILES_H 22 | 23 | #include 24 | #include 25 | 26 | G_BEGIN_DECLS 27 | 28 | void autostart_symlink(gboolean autostart); 29 | 30 | GSettingsSchema *get_settings_schema(); 31 | 32 | /** 33 | * Split the string `uris' using `g_strsplit()' with "\r\n" as the delimiter, 34 | * passing each split part through `g_filename_from_uri()', and passing the 35 | * result as an argument to the provided `cb' callback function. 36 | */ 37 | void 38 | foreach_file(const gchar *uris, const std::function& cb); 39 | 40 | G_END_DECLS 41 | 42 | #endif /* _FILES_H */ 43 | -------------------------------------------------------------------------------- /src/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Stepan Salenikovich 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | #include 21 | #include 22 | #include 23 | #include "config.h" 24 | #include "client.h" 25 | 26 | int 27 | main(int argc, char *argv[]) 28 | { 29 | setenv("GDK_BACKEND", "x11", true); // workaround for Wayland 30 | 31 | /* Internationalization; localization is done automatically by gtk during init */ 32 | bindtextdomain(PACKAGE_NAME, LOCALEDIR); 33 | bind_textdomain_codeset(PACKAGE_NAME, "UTF-8"); 34 | textdomain(PACKAGE_NAME); 35 | 36 | Client *client = client_new(argc, argv); 37 | g_set_application_name(JAMI_CLIENT_NAME); 38 | return g_application_run(G_APPLICATION(client), argc, argv); 39 | } 40 | -------------------------------------------------------------------------------- /src/native/dbuserrorhandler.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Stepan Salenikovich 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include 23 | #include 24 | #include 25 | 26 | namespace Interfaces { 27 | 28 | class DBusErrorHandler : public DBusErrorHandlerI { 29 | public: 30 | void connectionError(const QString& error) override; 31 | void invalidInterfaceError(const QString& error) override; 32 | 33 | void finishedHandlingError(); 34 | private: 35 | /* keeps track if we're in the process of handling an error already, so that we don't keep 36 | * displaying error dialogs; we use an atomic in case the errors come from multiple threads */ 37 | std::atomic_bool handlingError{false}; 38 | }; 39 | 40 | } // namespace Interfaces 41 | -------------------------------------------------------------------------------- /src/accountmigrationview.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016-2022 Savoir-faire Linux Inc. 3 | * Author: Alexandre Viau 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include 23 | 24 | #include 25 | #include "accountinfopointer.h" 26 | 27 | G_BEGIN_DECLS 28 | 29 | #define ACCOUNT_MIGRATION_VIEW_TYPE (account_migration_view_get_type ()) 30 | #define ACCOUNT_MIGRATION_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ACCOUNT_MIGRATION_VIEW_TYPE, AccountMigrationView)) 31 | #define ACCOUNT_MIGRATION_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), ACCOUNT_MIGRATION_VIEW_TYPE, AccountMigrationViewClass)) 32 | #define IS_ACCOUNT_MIGRATION_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), ACCOUNT_MIGRATION_VIEW_TYPE)) 33 | #define IS_ACCOUNT_MIGRATION_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), ACCOUNT_MIGRATION_VIEW_TYPE)) 34 | 35 | typedef struct _AccountMigrationView AccountMigrationView; 36 | typedef struct _AccountMigrationViewClass AccountMigrationViewClass; 37 | 38 | GType account_migration_view_get_type (void) G_GNUC_CONST; 39 | GtkWidget *account_migration_view_new (AccountInfoPointer const& accountInfo); 40 | 41 | G_END_DECLS 42 | -------------------------------------------------------------------------------- /cmake/cmake_uninstall.cmake.in: -------------------------------------------------------------------------------- 1 | # Taken from: 2 | # https://cmake.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F 3 | # 4 | # Copyright (C) 2016-2022 Savoir-faire Linux Inc. 5 | # 6 | # This program is free software; you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation; either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # This program is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with this program; if not, write to the Free Software 18 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 | # 20 | 21 | if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") 22 | message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") 23 | endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") 24 | 25 | file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) 26 | string(REGEX REPLACE "\n" ";" files "${files}") 27 | foreach(file ${files}) 28 | message(STATUS "Uninstalling $ENV{DESTDIR}${file}") 29 | if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") 30 | exec_program( 31 | "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" 32 | OUTPUT_VARIABLE rm_out 33 | RETURN_VALUE rm_retval 34 | ) 35 | if(NOT "${rm_retval}" STREQUAL 0) 36 | message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") 37 | endif(NOT "${rm_retval}" STREQUAL 0) 38 | else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") 39 | message(STATUS "File $ENV{DESTDIR}${file} does not exist.") 40 | endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") 41 | endforeach(file) 42 | -------------------------------------------------------------------------------- /src/welcomeview.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Stepan Salenikovich 4 | * Author: Nicolas Jäger 5 | * Author: Sébastien Blin 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program; if not, write to the Free Software 19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 20 | */ 21 | 22 | #pragma once 23 | 24 | #include 25 | 26 | #include "api/account.h" 27 | 28 | #include "accountinfopointer.h" 29 | 30 | G_BEGIN_DECLS 31 | 32 | #define WELCOME_VIEW_TYPE (welcome_view_get_type ()) 33 | #define WELCOME_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WELCOME_VIEW_TYPE, WelcomeView)) 34 | #define WELCOME_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), WELCOME_VIEW_TYPE, WelcomeViewClass)) 35 | #define IS_WELCOME_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), WELCOME_VIEW_TYPE)) 36 | #define IS_WELCOME_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), WELCOME_VIEW_TYPE)) 37 | 38 | typedef struct _WelcomeView WelcomeView; 39 | typedef struct _WelcomeViewClass WelcomeViewClass; 40 | 41 | GType welcome_view_get_type (void) G_GNUC_CONST; 42 | GtkWidget* welcome_view_new (AccountInfoPointer const & accountInfo); 43 | void welcome_update_view (WelcomeView* self); 44 | void welcome_set_theme (WelcomeView* self, bool useDarkTheme); 45 | 46 | G_END_DECLS 47 | -------------------------------------------------------------------------------- /src/pluginsettingsview.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Aline Gondim Santos 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | #ifndef _PLUGINSETTINGSVIEW_H 21 | #define _PLUGINSETTINGSVIEW_H 22 | 23 | #include 24 | 25 | namespace lrc 26 | { 27 | namespace api 28 | { 29 | class PluginModel; 30 | } 31 | } 32 | 33 | G_BEGIN_DECLS 34 | 35 | #define PLUGIN_SETTINGS_VIEW_TYPE (plugin_settings_view_get_type ()) 36 | #define PLUGIN_SETTINGS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PLUGIN_SETTINGS_VIEW_TYPE, PluginSettingsView)) 37 | #define PLUGIN_SETTINGS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PLUGIN_SETTINGS_VIEW_TYPE, PluginSettingsViewClass)) 38 | #define IS_PLUGIN_SETTINGS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PLUGIN_SETTINGS_VIEW_TYPE)) 39 | #define IS_PLUGIN_SETTINGS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PLUGIN_SETTINGS_VIEW_TYPE)) 40 | 41 | typedef struct _PluginSettingsView PluginSettingsView; 42 | typedef struct _PluginSettingsViewClass PluginSettingsViewClass; 43 | 44 | GType plugin_settings_view_get_type (void) G_GNUC_CONST; 45 | GtkWidget *plugin_settings_view_new (lrc::api::PluginModel& pluginModel); 46 | void plugin_settings_view_show (PluginSettingsView *view, gboolean show_preview); 47 | 48 | G_END_DECLS 49 | 50 | #endif /* _PLUGINSETTINGSVIEW_H */ 51 | -------------------------------------------------------------------------------- /src/generalsettingsview.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Stepan Salenikovich 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | #ifndef _GENERALSETTINGSVIEW_H 21 | #define _GENERALSETTINGSVIEW_H 22 | 23 | #include 24 | 25 | namespace lrc { namespace api { 26 | class AVModel; 27 | class DataTransferModel; 28 | class NewAccountModel; 29 | }} 30 | 31 | G_BEGIN_DECLS 32 | 33 | #define GENERAL_SETTINGS_VIEW_TYPE (general_settings_view_get_type ()) 34 | #define GENERAL_SETTINGS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GENERAL_SETTINGS_VIEW_TYPE, GeneralSettingsView)) 35 | #define GENERAL_SETTINGS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GENERAL_SETTINGS_VIEW_TYPE, GeneralSettingsViewClass)) 36 | #define IS_GENERAL_SETTINGS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GENERAL_SETTINGS_VIEW_TYPE)) 37 | #define IS_GENERAL_SETTINGS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GENERAL_SETTINGS_VIEW_TYPE)) 38 | 39 | typedef struct _GeneralSettingsView GeneralSettingsView; 40 | typedef struct _GeneralSettingsViewClass GeneralSettingsViewClass; 41 | 42 | GType general_settings_view_get_type (void) G_GNUC_CONST; 43 | GtkWidget *general_settings_view_new (GtkWidget* main_window_pnt, lrc::api::AVModel& avModel, lrc::api::NewAccountModel& accountModel); 44 | 45 | G_END_DECLS 46 | 47 | #endif /* _GENERALSETTINGSVIEW_H */ 48 | -------------------------------------------------------------------------------- /src/mediasettingsview.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Stepan Salenikovich 4 | * Author: Sébastien Blin 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 | */ 20 | 21 | #ifndef _MEDIASETTINGSVIEW_H 22 | #define _MEDIASETTINGSVIEW_H 23 | 24 | #include 25 | 26 | namespace lrc 27 | { 28 | namespace api 29 | { 30 | class AVModel; 31 | } 32 | } 33 | 34 | G_BEGIN_DECLS 35 | 36 | #define MEDIA_SETTINGS_VIEW_TYPE (media_settings_view_get_type ()) 37 | #define MEDIA_SETTINGS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MEDIA_SETTINGS_VIEW_TYPE, MediaSettingsView)) 38 | #define MEDIA_SETTINGS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), MEDIA_SETTINGS_VIEW_TYPE, MediaSettingsViewClass)) 39 | #define IS_MEDIA_SETTINGS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), MEDIA_SETTINGS_VIEW_TYPE)) 40 | #define IS_MEDIA_SETTINGS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), MEDIA_SETTINGS_VIEW_TYPE)) 41 | 42 | typedef struct _MediaSettingsView MediaSettingsView; 43 | typedef struct _MediaSettingsViewClass MediaSettingsViewClass; 44 | 45 | GType media_settings_view_get_type (void) G_GNUC_CONST; 46 | GtkWidget *media_settings_view_new (lrc::api::AVModel& avModel); 47 | void media_settings_view_show_preview (MediaSettingsView *self, gboolean show_preview); 48 | 49 | G_END_DECLS 50 | 51 | #endif /* _MEDIASETTINGSVIEW_H */ 52 | -------------------------------------------------------------------------------- /src/client.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Stepan Salenikovich 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | #ifndef CLIENT_H_ 21 | #define CLIENT_H_ 22 | 23 | #include 24 | #include "config.h" 25 | 26 | G_BEGIN_DECLS 27 | 28 | #define GSETTINGS_SCHEMA JAMI_CLIENT_APP_ID 29 | 30 | #define CLIENT_TYPE (client_get_type()) 31 | #define CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), CLIENT_TYPE, Client)) 32 | #define CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), CLIENT_TYPE, ClientClass)) 33 | #define IS_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), CLIENT_TYPE)) 34 | #define IS_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), CLIENT_TYPE)) 35 | 36 | typedef struct _ClientClass ClientClass; 37 | typedef struct _Client Client; 38 | 39 | /* Public interface */ 40 | GType client_get_type (void) G_GNUC_CONST; 41 | Client *client_new (int argc, char *argv[]); 42 | GtkWindow *client_get_main_window(Client *client); 43 | 44 | /** 45 | * Sets if the client should attempt to restore the main window state (hidden or not) to what it was 46 | * when it was last quit (stored by the "show-main-window" gsetting). This function must be 47 | * called before the main window is created for the first time for it to have an effect. 48 | */ 49 | void client_set_restore_main_window_state(Client *client, gboolean restore); 50 | 51 | G_END_DECLS 52 | 53 | #endif /* CLIENT_H_ */ 54 | -------------------------------------------------------------------------------- /src/usernameregistrationbox.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016-2022 Savoir-faire Linux Inc. 3 | * Author: Alexandre Viau 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include 23 | 24 | #include 25 | #include "accountinfopointer.h" 26 | 27 | class Account; 28 | 29 | G_BEGIN_DECLS 30 | 31 | #define USERNAME_REGISTRATION_BOX_TYPE (username_registration_box_get_type ()) 32 | #define USERNAME_REGISTRATION_BOX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), USERNAME_REGISTRATION_BOX_TYPE, UsernameRegistrationBox)) 33 | #define USERNAME_REGISTRATION_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), USERNAME_REGISTRATION_BOX_TYPE, UsernameRegistrationBoxClass)) 34 | #define IS_USERNAME_REGISTRATION_BOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), USERNAME_REGISTRATION_BOX_TYPE)) 35 | #define IS_USERNAME_REGISTRATION_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), USERNAME_REGISTRATION_BOX_TYPE)) 36 | 37 | typedef struct _UsernameRegistrationBox UsernameRegistrationBox; 38 | typedef struct _UsernameRegistrationBoxClass UsernameRegistrationBoxClass; 39 | 40 | GType username_registration_box_get_type (void) G_GNUC_CONST; 41 | GtkWidget *username_registration_box_new_empty (bool register_button); 42 | GtkWidget *username_registration_box_new (AccountInfoPointer const & accountInfo, bool register_button); 43 | GtkEntry* username_registration_box_get_entry (UsernameRegistrationBox *view); 44 | void username_registration_box_set_use_blockchain (UsernameRegistrationBox* view, gboolean use_blockchain); 45 | 46 | G_END_DECLS 47 | -------------------------------------------------------------------------------- /pixmaps/baseline-mic-recording-24px.svg: -------------------------------------------------------------------------------- 1 | 2 | 17 | 19 | 20 | 22 | image/svg+xml 23 | 25 | 26 | 27 | 28 | 29 | 31 | 52 | 55 | 59 | 65 | 72 | 73 | -------------------------------------------------------------------------------- /pixmaps/ic_verified_user_black_24px_with_notification.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 21 | 23 | image/svg+xml 24 | 26 | 27 | 28 | 29 | 30 | 32 | 52 | 56 | 59 | 65 | 66 | -------------------------------------------------------------------------------- /ui/usernameregistrationbox.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 58 | 59 | -------------------------------------------------------------------------------- /pixmaps/ic_verified_user_white_24px_with_notification.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 21 | 23 | image/svg+xml 24 | 26 | 27 | 28 | 29 | 30 | 32 | 52 | 56 | 60 | 66 | 67 | -------------------------------------------------------------------------------- /src/messagingwidget.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2018-2022 Savoir-faire Linux Inc. 3 | * Author: Hugo Lefeuvre 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | #pragma once 20 | 21 | // GTK 22 | #include 23 | 24 | // std 25 | #include 26 | 27 | // client 28 | #include "accountinfopointer.h" 29 | 30 | namespace lrc 31 | { 32 | namespace api 33 | { 34 | class AVModel; 35 | namespace conversation 36 | { 37 | struct Info; 38 | } 39 | } 40 | } 41 | 42 | G_BEGIN_DECLS 43 | 44 | #define MESSAGING_WIDGET_TYPE (messaging_widget_get_type ()) 45 | #define MESSAGING_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MESSAGING_WIDGET_TYPE, MessagingWidget)) 46 | #define MESSAGING_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), MESSAGING_WIDGET_TYPE, MessagingWidget)) 47 | #define IS_MESSAGING_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), MESSAGING_WIDGET_TYPE)) 48 | #define IS_MESSAGING_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), MESSAGING_WIDGET_TYPE)) 49 | 50 | typedef struct _MessagingWidget MessagingWidget; 51 | typedef struct _MessagingWidgetClass MessagingWidgetClass; 52 | 53 | typedef enum 54 | { 55 | MESSAGING_WIDGET_STATE_INIT, 56 | MESSAGING_WIDGET_REC_AUDIO, 57 | MESSAGING_WIDGET_AUDIO_REC_SUCCESS, 58 | MESSAGING_WIDGET_REC_SENT 59 | } MessagingWidgetState; 60 | 61 | GType messaging_widget_get_type (void) G_GNUC_CONST; 62 | GtkWidget* messaging_widget_new (lrc::api::AVModel& avModel, 63 | lrc::api::conversation::Info& conversation, 64 | AccountInfoPointer const & accountInfo); 65 | void messaging_widget_set_peer_name (MessagingWidget *self, std::string name); 66 | 67 | G_END_DECLS 68 | -------------------------------------------------------------------------------- /src/mainwindow.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Stepan Salenikovich 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include 23 | 24 | G_BEGIN_DECLS 25 | 26 | #define MAIN_WINDOW_TYPE (main_window_get_type ()) 27 | #define MAIN_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAIN_WINDOW_TYPE, MainWindow)) 28 | #define MAIN_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), MAIN_WINDOW_TYPE, MainWindowClass)) 29 | #define IS_MAIN_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), MAIN_WINDOW_TYPE)) 30 | #define IS_MAIN_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), MAIN_WINDOW_TYPE)) 31 | 32 | 33 | typedef struct _MainWindow MainWindow; 34 | typedef struct _MainWindowClass MainWindowClass; 35 | 36 | 37 | GType main_window_get_type (void) G_GNUC_CONST; 38 | GtkWidget *main_window_new (GtkApplication *app); 39 | void main_window_reset (MainWindow *win); 40 | bool main_window_can_close(MainWindow *win); 41 | void main_window_display_account_list(MainWindow *win); 42 | void main_window_search(MainWindow *win); 43 | bool main_window_get_urgency(MainWindow *win); 44 | 45 | void main_window_conversations_list(MainWindow *win); 46 | void main_window_requests_list(MainWindow *win); 47 | void main_window_audio_call(MainWindow *win); 48 | void main_window_clear_history(MainWindow *win); 49 | void main_window_remove_conversation(MainWindow *win); 50 | void main_window_block_contact(MainWindow *win); 51 | void main_window_unblock_contact(MainWindow *win); 52 | void main_window_copy_contact(MainWindow *win); 53 | void main_window_add_contact(MainWindow *win); 54 | void main_window_accept_call(MainWindow *win); 55 | void main_window_decline_call(MainWindow *win); 56 | void main_window_toggle_fullscreen(MainWindow *win); 57 | 58 | G_END_DECLS 59 | -------------------------------------------------------------------------------- /src/accountcreationwizard.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016-2022 Savoir-faire Linux Inc. 3 | * Author: Alexandre Viau 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include 23 | 24 | #include 25 | 26 | #include 27 | 28 | #include "accountinfopointer.h" 29 | 30 | namespace lrc 31 | { 32 | namespace api 33 | { 34 | class AVModel; 35 | class NewAccountModel; 36 | } 37 | } 38 | 39 | G_BEGIN_DECLS 40 | 41 | #define ACCOUNT_CREATION_WIZARD_TYPE (account_creation_wizard_get_type ()) 42 | #define ACCOUNT_CREATION_WIZARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ACCOUNT_CREATION_WIZARD_TYPE, AccountCreationWizard)) 43 | #define ACCOUNT_CREATION_WIZARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), ACCOUNT_CREATION_WIZARD_TYPE, AccountCreationWizardClass)) 44 | #define IS_ACCOUNT_CREATION_WIZARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), ACCOUNT_CREATION_WIZARD_TYPE)) 45 | #define IS_ACCOUNT_CREATION_WIZARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), ACCOUNT_CREATION_WIZARD_TYPE)) 46 | 47 | typedef struct _AccountCreationWizard AccountCreationWizard; 48 | typedef struct _AccountCreationWizardClass AccountCreationWizardClass; 49 | 50 | GType account_creation_wizard_get_type (void) G_GNUC_CONST; 51 | GtkWidget *account_creation_wizard_new (lrc::api::AVModel& avModel, lrc::api::NewAccountModel& accountModel, bool useDarkTheme); 52 | 53 | void account_creation_wizard_show_preview (AccountCreationWizard *win, gboolean show_preview = TRUE); 54 | void show_rendezvous_creation_wizard (AccountCreationWizard *win); 55 | void account_creation_wizard_account_added (AccountCreationWizard *view, const std::string& id); 56 | void account_creation_show_error_view (AccountCreationWizard *view, const std::string& id); 57 | 58 | G_END_DECLS 59 | -------------------------------------------------------------------------------- /src/newaccountsettingsview.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Stepan Salenikovich 4 | * Author: Sebastien Blin 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 | */ 20 | 21 | #ifndef _NEWACCOUNTSETTINGSVIEW_H 22 | #define _NEWACCOUNTSETTINGSVIEW_H 23 | 24 | #include 25 | 26 | #include 27 | 28 | #include "accountinfopointer.h" 29 | 30 | namespace lrc 31 | { 32 | namespace api 33 | { 34 | class AVModel; 35 | } 36 | } 37 | 38 | G_BEGIN_DECLS 39 | 40 | #define NEW_ACCOUNT_SETTINGS_VIEW_TYPE (new_account_settings_view_get_type ()) 41 | #define NEW_ACCOUNT_SETTINGS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NEW_ACCOUNT_SETTINGS_VIEW_TYPE, NewAccountSettingsView)) 42 | #define NEW_ACCOUNT_SETTINGS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), NEW_ACCOUNT_SETTINGS_VIEW_TYPE, NewAccountSettingsViewClass)) 43 | #define IS_NEW_ACCOUNT_SETTINGS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NEW_ACCOUNT_SETTINGS_VIEW_TYPE)) 44 | #define IS_NEW_ACCOUNT_SETTINGS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NEW_ACCOUNT_SETTINGS_VIEW_TYPE)) 45 | 46 | typedef struct _NewAccountSettingsView NewAccountSettingsView; 47 | typedef struct _NewAccountSettingsViewClass NewAccountSettingsViewClass; 48 | 49 | GType new_account_settings_view_get_type (void) G_GNUC_CONST; 50 | GtkWidget *new_account_settings_view_new (AccountInfoPointer const & accountInfo, lrc::api::AVModel& avModel); 51 | void new_account_settings_view_show (NewAccountSettingsView *view, gboolean show_profile); 52 | void new_account_settings_view_update (NewAccountSettingsView *view, gboolean reset_view = true); 53 | void new_account_settings_view_save_account (NewAccountSettingsView *view); 54 | 55 | G_END_DECLS 56 | 57 | #endif /* _NEWACCOUNTSETTINGSVIEW_H */ 58 | -------------------------------------------------------------------------------- /src/conversationpopupmenu.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * Copyright (C) 2017-2022 Savoir-faire Linux Inc. * 3 | * Author: Nicolas Jäger * 4 | * Author: Sébastien Blin * 5 | * * 6 | * This library is free software; you can redistribute it and/or * 7 | * modify it under the terms of the GNU Lesser General Public * 8 | * License as published by the Free Software Foundation; either * 9 | * version 2.1 of the License, or (at your option) any later version. * 10 | * * 11 | * This library is distributed in the hope that it will be useful, * 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of * 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 14 | * Lesser General Public License for more details. * 15 | * * 16 | * You should have received a copy of the GNU General Public License * 17 | * along with this program. If not, see . * 18 | ***************************************************************************/ 19 | #pragma once 20 | 21 | // GTK+ related 22 | #include 23 | 24 | // LRC 25 | #include "api/account.h" 26 | 27 | #include "accountinfopointer.h" 28 | 29 | G_BEGIN_DECLS 30 | 31 | #define CONVERSATION_POPUP_MENU_TYPE (conversation_popup_menu_get_type ()) 32 | #define CONVERSATION_POPUP_MENU(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CONVERSATION_POPUP_MENU_TYPE, ConversationPopupMenu)) 33 | #define CONVERSATION_POPUP_MENU_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), CONVERSATION_POPUP_MENU_TYPE, ConversationPopupMenuClass)) 34 | #define IS_CONVERSATION_POPUP_MENU(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), CONVERSATION_POPUP_MENU_TYPE)) 35 | #define IS_CONVERSATION_POPUP_MENU_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), CONVERSATION_POPUP_MENU_TYPE)) 36 | 37 | typedef struct _ConversationPopupMenu ConversationPopupMenu; 38 | typedef struct _ConversationPopupMenuClass ConversationPopupMenuClass; 39 | 40 | GType conversation_popup_menu_get_type (void) G_GNUC_CONST; 41 | GtkWidget *conversation_popup_menu_new (GtkTreeView *treeview, AccountInfoPointer const & accountInfo); 42 | gboolean conversation_popup_menu_show (ConversationPopupMenu *self, GdkEventButton *event); 43 | 44 | G_END_DECLS 45 | -------------------------------------------------------------------------------- /src/notifier.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Stepan Salenikovich 4 | * Author: Sebastien Blin 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 | */ 20 | 21 | #ifndef NOTIFY_H_ 22 | #define NOTIFY_H_ 23 | 24 | #include 25 | #include 26 | 27 | G_BEGIN_DECLS 28 | #define NOTIFIER_TYPE (notifier_get_type ()) 29 | #define NOTIFIER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NOTIFIER_TYPE, Notifier)) 30 | #define NOTIFIER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), NOTIFIER_TYPE, NotifierClass)) 31 | #define IS_NOTIFIER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NOTIFIER_TYPE)) 32 | #define IS_NOTIFIER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NOTIFIER_TYPE)) 33 | 34 | typedef struct _Notifier Notifier; 35 | typedef struct _NotifierClass NotifierClass; 36 | 37 | enum class NotificationType 38 | { 39 | CALL, 40 | REQUEST, 41 | CHAT 42 | }; 43 | 44 | GType notifier_get_type (void) G_GNUC_CONST; 45 | GtkWidget* notifier_new (void); 46 | 47 | gboolean show_notification(Notifier* view, 48 | const std::string& icon, 49 | const std::string& uri, 50 | const std::string& name, 51 | const std::string& id, 52 | const std::string& title, 53 | const std::string& body, 54 | NotificationType type, 55 | const std::string& conversation = ""); 56 | gboolean hide_notification(Notifier* view, const std::string& id); 57 | gboolean has_notification(Notifier* view, const std::string& id); 58 | std::string get_notification_conversation(Notifier* view, const std::string& id); 59 | 60 | G_END_DECLS 61 | 62 | #endif /* NOTIFY_H_ */ 63 | -------------------------------------------------------------------------------- /src/conversationsview.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * Copyright (C) 2017-2022 Savoir-faire Linux Inc. * 3 | * Author: Nicolas Jäger * 4 | * Author: Sébastien Blin * 5 | * * 6 | * This library is free software; you can redistribute it and/or * 7 | * modify it under the terms of the GNU Lesser General Public * 8 | * License as published by the Free Software Foundation; either * 9 | * version 2.1 of the License, or (at your option) any later version. * 10 | * * 11 | * This library is distributed in the hope that it will be useful, * 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of * 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 14 | * Lesser General Public License for more details. * 15 | * * 16 | * You should have received a copy of the GNU General Public License * 17 | * along with this program. If not, see . * 18 | ***************************************************************************/ 19 | #pragma once 20 | 21 | #include 22 | 23 | #include "api/account.h" 24 | 25 | #include "accountinfopointer.h" 26 | 27 | G_BEGIN_DECLS 28 | 29 | #define CONVERSATIONS_VIEW_TYPE (conversations_view_get_type ()) 30 | #define CONVERSATIONS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CONVERSATIONS_VIEW_TYPE, ConversationsView)) 31 | #define CONVERSATIONS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), CONVERSATIONS_VIEW_TYPE, ConversationsViewClass)) 32 | #define IS_CONVERSATIONS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), CONVERSATIONS_VIEW_TYPE)) 33 | #define IS_CONVERSATIONS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), CONVERSATIONS_VIEW_TYPE)) 34 | 35 | typedef struct _ConversationsView ConversationsView; 36 | typedef struct _ConversationsViewClass ConversationsViewClass; 37 | 38 | GType conversations_view_get_type (void) G_GNUC_CONST; 39 | GtkWidget *conversations_view_new (AccountInfoPointer const & accountInfo); 40 | void conversations_view_select_conversation (ConversationsView *self, const std::string& uid); 41 | std::string conversations_view_get_current_selected(ConversationsView *self); 42 | void conversations_view_set_theme(ConversationsView *self, bool darkTheme); 43 | 44 | G_END_DECLS 45 | -------------------------------------------------------------------------------- /src/chatview.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016-2022 Savoir-faire Linux Inc. 3 | * Author: Stepan Salenikovich 4 | * Author: Nicolas Jäger 5 | * Author: Sébastien Blin 6 | * Author: Hugo Lefeuvre 7 | * 8 | * This program is free software; you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation; either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with this program; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | */ 22 | 23 | #pragma once 24 | 25 | // Gtk 26 | #include 27 | 28 | // Client related 29 | #include "api/account.h" 30 | #include "webkitchatcontainer.h" 31 | #include "accountinfopointer.h" 32 | 33 | namespace lrc 34 | { 35 | namespace api 36 | { 37 | class AVModel; 38 | class PluginModel; 39 | namespace conversation 40 | { 41 | struct Info; 42 | } 43 | } 44 | } 45 | 46 | G_BEGIN_DECLS 47 | 48 | #define CHAT_VIEW_TYPE (chat_view_get_type ()) 49 | #define CHAT_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CHAT_VIEW_TYPE, ChatView)) 50 | #define CHAT_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), CHAT_VIEW_TYPE, ChatViewClass)) 51 | #define IS_CHAT_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), CHAT_VIEW_TYPE)) 52 | #define IS_CHAT_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), CHAT_VIEW_TYPE)) 53 | 54 | typedef struct _ChatView ChatView; 55 | typedef struct _ChatViewClass ChatViewClass; 56 | 57 | GType chat_view_get_type (void) G_GNUC_CONST; 58 | GtkWidget *chat_view_new (WebKitChatContainer* view, 59 | AccountInfoPointer const & accountInfo, 60 | lrc::api::conversation::Info& conversation, 61 | lrc::api::AVModel& avModel, 62 | lrc::api::PluginModel& pluginModel); 63 | lrc::api::conversation::Info& chat_view_get_conversation(ChatView*); 64 | void chat_view_update_temporary(ChatView*); 65 | void chat_view_set_header_visible(ChatView*, gboolean); 66 | void chat_view_set_record_visible(ChatView*, gboolean); 67 | void chat_view_set_plugin_visible(ChatView*, gboolean); 68 | 69 | G_END_DECLS 70 | -------------------------------------------------------------------------------- /cmake/GResources.cmake: -------------------------------------------------------------------------------- 1 | # The code below was taken from the Venom project which is released under the 2 | # GNU General Public License, version 3 3 | # 4 | # Copyright (C) 2013 Venom authors and contributors 5 | # 6 | # See https://github.com/naxuroqa/Venom for a list of contributors. 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 3 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License 19 | # along with this program; if not, write to the Free Software 20 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | # 22 | 23 | FIND_PROGRAM(GLIB_COMPILE_RESOURCES_EXECUTABLE NAMES glib-compile-resources) 24 | MARK_AS_ADVANCED(GLIB_COMPILE_RESOURCES_EXECUTABLE) 25 | 26 | INCLUDE(CMakeParseArguments) 27 | 28 | FUNCTION(GLIB_COMPILE_RESOURCES output) 29 | CMAKE_PARSE_ARGUMENTS(ARGS "" "" "SOURCE" ${ARGN}) 30 | SET(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) 31 | SET(out_files "") 32 | 33 | FOREACH(src ${ARGS_SOURCE} ${ARGS_UNPARSED_ARGUMENTS}) 34 | SET(in_file "${CMAKE_CURRENT_SOURCE_DIR}/${src}") 35 | GET_FILENAME_COMPONENT(WORKING_DIR ${in_file} PATH) 36 | STRING(REPLACE ".xml" ".c" src ${src}) 37 | SET(out_file "${DIRECTORY}/${src}") 38 | GET_FILENAME_COMPONENT(OUPUT_DIR ${out_file} PATH) 39 | FILE(MAKE_DIRECTORY ${OUPUT_DIR}) 40 | LIST(APPEND out_files "${DIRECTORY}/${src}") 41 | 42 | #FIXME implicit depends currently not working 43 | EXECUTE_PROCESS( 44 | COMMAND 45 | ${GLIB_COMPILE_RESOURCES_EXECUTABLE} 46 | "--generate-dependencies" 47 | ${in_file} 48 | WORKING_DIRECTORY ${WORKING_DIR} 49 | OUTPUT_VARIABLE in_file_dep 50 | ) 51 | STRING(REGEX REPLACE "(\r?\n)" ";" in_file_dep "${in_file_dep}") 52 | SET(in_file_dep_path "") 53 | FOREACH(dep ${in_file_dep}) 54 | LIST(APPEND in_file_dep_path "${WORKING_DIR}/${dep}") 55 | ENDFOREACH(dep ${in_file_dep}) 56 | ADD_CUSTOM_COMMAND( 57 | OUTPUT ${out_file} 58 | WORKING_DIRECTORY ${WORKING_DIR} 59 | COMMAND 60 | ${GLIB_COMPILE_RESOURCES_EXECUTABLE} 61 | ARGS 62 | "--generate-source" 63 | "--target=${out_file}" 64 | ${in_file} 65 | DEPENDS 66 | ${in_file};${in_file_dep_path} 67 | ) 68 | ENDFOREACH(src ${ARGS_SOURCES} ${ARGS_UNPARSED_ARGUMENTS}) 69 | SET(${output} ${out_files} PARENT_SCOPE) 70 | ENDFUNCTION(GLIB_COMPILE_RESOURCES) 71 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Jami Gnome 2 | 3 | GNU Jami welcomes contribution from everyone. Here are some ideas if you want 4 | to help: 5 | 6 | ## Packaging 7 | 8 | Packaging Jami allows easier installation by end-users and in this sense it's an 9 | excellent way of contributing to Jami! 10 | 11 | If your distribution doesn't have a Jami package you can create one, and if 12 | somebody is already maintaining a Jami package for your distribution, 13 | you can help him out! 14 | 15 | ## Design 16 | 17 | Jami aims to be a universal platform of communication, accessible and usable by 18 | everybody. If you find issues with the client, or simply want to suggest 19 | improvement ideas, the bug tracker is the perfect place to submit them. 20 | 21 | ## Documentation 22 | 23 | The documentation should be as up-to-date as possible to help users, devs and 24 | anyone who wants to get information. This wiki is currently located [here](https://git.jami.net/savoirfairelinux/ring-project/wikis/home). 25 | 26 | ## Testing 27 | 28 | The client is under continuous development with new features, bugfixes, etc. 29 | Because communications software depends on a lot of conditions, we need people 30 | to test and fill tickets when necessary. To submit a new bug, go to https://git.jami.net/savoirfairelinux/ring-client-gnome/issues. 31 | 32 | Sometimes interpreting bug reports is difficult for us, for example because we 33 | can't reproduce the bug or understand what exactly the issue is. 34 | This is usually because the bug report lacks of details / is too vague. 35 | 36 | In order to make your bug report as helpful as possible, think about providing 37 | as many details, clear explanations and scenarios as possible! 38 | Also, we've written a [guide on how to report bugs](https://git.jami.net/savoirfairelinux/ring-project/wikis/Bug-report-guide), 39 | if you're unsure, check it out! 40 | 41 | ## Support 42 | 43 | Helping users when they post issues or questions on a social network or IRC for example is appreciated. Thank you! 44 | 45 | ## Communication 46 | 47 | Talk to Jami to other people is appreciated too! 48 | 49 | ## Translation 50 | 51 | We are currently using [Transifex](https://www.transifex.com/savoirfairelinux/ring/) to translate the client. 52 | 53 | ## Development 54 | 55 | Finally and not the least, you can also try to develop new features for this client. 56 | The best way is to communicate with current developers via the Contact section (see below) 57 | or by filling a new issue [here](https://git.jami.net/savoirfairelinux/ring-client-gnome/issues) 58 | or by taking one. See the [`good-first-bug` label](https://git.jami.net/savoirfairelinux/ring-client-gnome/issues?label_name%5B%5D=good+first+bug) 59 | if you don't know where to start. 60 | 61 | # Contact 62 | 63 | contributors and users frequent: 64 | + the `#ring` channel on `irc.freenode.net` 65 | + the mailing list: `ring@gnu.org` 66 | -------------------------------------------------------------------------------- /src/incomingcallview.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Stepan Salenikovich 4 | * Author: Nicolas Jäger 5 | * Author: Sébastien Blin 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program; if not, write to the Free Software 19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 20 | */ 21 | 22 | #pragma once 23 | 24 | // Gtk 25 | #include 26 | 27 | // client 28 | #include "api/account.h" 29 | #include "webkitchatcontainer.h" 30 | #include "accountinfopointer.h" 31 | 32 | namespace lrc 33 | { 34 | namespace api 35 | { 36 | class AVModel; 37 | class PluginModel; 38 | namespace conversation 39 | { 40 | struct Info; 41 | } 42 | } 43 | } 44 | 45 | G_BEGIN_DECLS 46 | 47 | #define INCOMING_CALL_VIEW_TYPE (incoming_call_view_get_type ()) 48 | #define INCOMING_CALL_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), INCOMING_CALL_VIEW_TYPE, IncomingCallView)) 49 | #define INCOMING_CALL_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), INCOMING_CALL_VIEW_TYPE, IncomingCallViewClass)) 50 | #define IS_INCOMING_CALL_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), INCOMING_CALL_VIEW_TYPE)) 51 | #define IS_INCOMING_CALL_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), INCOMING_CALL_VIEW_TYPE)) 52 | 53 | typedef struct _IncomingCallView IncomingCallView; 54 | typedef struct _IncomingCallViewClass IncomingCallViewClass; 55 | 56 | 57 | GType incoming_call_view_get_type (void) G_GNUC_CONST; 58 | GtkWidget *incoming_call_view_new (WebKitChatContainer* view, 59 | lrc::api::AVModel& avModel, 60 | lrc::api::PluginModel& pluginModel, 61 | AccountInfoPointer const & accountInfo, 62 | lrc::api::conversation::Info& conversation); 63 | void incoming_call_view_let_a_message(IncomingCallView* view, const lrc::api::conversation::Info& conv); 64 | bool is_showing_let_a_message_view(IncomingCallView* view, lrc::api::conversation::Info& conv); 65 | lrc::api::conversation::Info& incoming_call_view_get_conversation (IncomingCallView*); 66 | 67 | G_END_DECLS 68 | -------------------------------------------------------------------------------- /src/cc-crop-area.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2009 Bastien Nocera 3 | * 4 | * Licensed under the GNU General Public License Version 2 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | 20 | #ifndef _CC_CROP_AREA_H_ 21 | #define _CC_CROP_AREA_H_ 22 | 23 | #include 24 | #include 25 | 26 | G_BEGIN_DECLS 27 | 28 | #define CC_TYPE_CROP_AREA (cc_crop_area_get_type ()) 29 | #define CC_CROP_AREA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CC_TYPE_CROP_AREA, \ 30 | CcCropArea)) 31 | #define CC_CROP_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CC_TYPE_CROP_AREA, \ 32 | CcCropAreaClass)) 33 | #define CC_IS_CROP_AREA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CC_TYPE_CROP_AREA)) 34 | #define CC_IS_CROP_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CC_TYPE_CROP_AREA)) 35 | #define CC_CROP_AREA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CC_TYPE_CROP_AREA, \ 36 | CcCropAreaClass)) 37 | 38 | typedef struct _CcCropAreaClass CcCropAreaClass; 39 | typedef struct _CcCropArea CcCropArea; 40 | typedef struct _CcCropAreaPrivate CcCropAreaPrivate; 41 | 42 | struct _CcCropAreaClass { 43 | GtkDrawingAreaClass parent_class; 44 | }; 45 | 46 | struct _CcCropArea { 47 | GtkDrawingArea parent_instance; 48 | CcCropAreaPrivate *priv; 49 | }; 50 | 51 | GType cc_crop_area_get_type (void) G_GNUC_CONST; 52 | 53 | GtkWidget *cc_crop_area_new (void); 54 | GdkPixbuf *cc_crop_area_get_picture (CcCropArea *area); 55 | void cc_crop_area_set_picture (CcCropArea *area, 56 | GdkPixbuf *pixbuf); 57 | void cc_crop_area_set_min_size (CcCropArea *area, 58 | gint width, 59 | gint height); 60 | void cc_crop_area_set_constrain_aspect (CcCropArea *area, 61 | gboolean constrain); 62 | 63 | G_END_DECLS 64 | 65 | #endif /* _CC_CROP_AREA_H_ */ 66 | -------------------------------------------------------------------------------- /src/utils/drawing.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Stepan Salenikovich 4 | * Author: Sebastien Blin 5 | * Author: Amin Bandali 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program; if not, write to the Free Software 19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 20 | */ 21 | 22 | #ifndef _DRAWING_H 23 | #define _DRAWING_H 24 | 25 | #include 26 | 27 | #include 28 | 29 | #include 30 | 31 | namespace lrc 32 | { 33 | namespace api 34 | { 35 | namespace account 36 | { 37 | struct Info; 38 | } 39 | namespace conversation 40 | { 41 | struct Info; 42 | } 43 | } 44 | } 45 | 46 | G_BEGIN_DECLS 47 | 48 | enum class IconStatus { 49 | ABSENT, 50 | PRESENT, 51 | DISCONNECTED, 52 | TRYING, 53 | CONNECTED, 54 | INVALID 55 | }; 56 | 57 | GdkPixbuf *draw_fallback_avatar(int size, const std::string& letter, 58 | const char color = 0); 59 | GdkPixbuf *draw_conference_avatar(int size); 60 | GdkPixbuf *frame_avatar(GdkPixbuf *avatar); 61 | GdkPixbuf *draw_unread_messages(const GdkPixbuf *avatar, 62 | int unread_count); 63 | gboolean draw_qrcode(cairo_t *cr, const std::string& to_encode, 64 | uint32_t size); 65 | GdkPixbuf *draw_status(const GdkPixbuf *avatar, IconStatus status); 66 | GdkRGBA get_ambient_color(GtkWidget *widget); 67 | gboolean use_dark_theme(GdkRGBA color); 68 | GdkPixbuf *draw_conversation_photo( 69 | const lrc::api::conversation::Info& conversation, 70 | const lrc::api::account::Info& accountInfo, 71 | const QSize& size, 72 | gboolean displayInformation = true); 73 | GdkPixbuf *draw_person_photo(const QByteArray& data); 74 | GdkPixbuf *draw_generate_avatar(const std::string& alias, 75 | const std::string& uri); 76 | GdkPixbuf *draw_scale_and_frame( 77 | const GdkPixbuf *photo, 78 | const QSize &size, 79 | gboolean displayInformation = false, 80 | IconStatus status = IconStatus::INVALID, 81 | uint unreadMessages = 0); 82 | QByteArray gdkpixbuf_to_QByteArray(GdkPixbuf *pxm); 83 | 84 | G_END_DECLS 85 | 86 | #endif /* _DRAWING */ 87 | -------------------------------------------------------------------------------- /src/currentcallview.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Stepan Salenikovich 4 | * Author: Nicolas Jäger 5 | * Author: Sébastien Blin 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program; if not, write to the Free Software 19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 20 | */ 21 | 22 | #pragma once 23 | 24 | #include 25 | #include "api/account.h" 26 | #include "api/lrc.h" 27 | #include "webkitchatcontainer.h" 28 | #include "accountinfopointer.h" 29 | 30 | namespace lrc 31 | { 32 | namespace api 33 | { 34 | class AVModel; 35 | namespace conversation 36 | { 37 | struct Info; 38 | } 39 | } 40 | } 41 | 42 | G_BEGIN_DECLS 43 | 44 | #define CURRENT_CALL_VIEW_TYPE (current_call_view_get_type ()) 45 | #define CURRENT_CALL_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CURRENT_CALL_VIEW_TYPE, CurrentCallView)) 46 | #define CURRENT_CALL_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), CURRENT_CALL_VIEW_TYPE, CurrentCallViewClass)) 47 | #define IS_CURRENT_CALL_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), CURRENT_CALL_VIEW_TYPE)) 48 | #define IS_CURRENT_CALL_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), CURRENT_CALL_VIEW_TYPE)) 49 | 50 | typedef struct _CurrentCallView CurrentCallView; 51 | typedef struct _CurrentCallViewClass CurrentCallViewClass; 52 | 53 | 54 | GType current_call_view_get_type (void) G_GNUC_CONST; 55 | GtkWidget *current_call_view_new (WebKitChatContainer* view, 56 | AccountInfoPointer const & accountInfo, 57 | lrc::api::conversation::Info& conversation, 58 | lrc::api::AVModel& avModel, 59 | const lrc::api::Lrc& lrc); 60 | lrc::api::conversation::Info& current_call_view_get_conversation(CurrentCallView*); 61 | GtkWidget *current_call_view_get_chat_view(CurrentCallView*); 62 | std::string current_call_view_get_rendered_call(CurrentCallView*); 63 | void current_call_view_show_chat(CurrentCallView*); 64 | void current_call_view_handup_focus(GtkWidget *current_call_view); 65 | 66 | G_END_DECLS 67 | -------------------------------------------------------------------------------- /src/avatarmanipulation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016-2022 Savoir-faire Linux Inc. 3 | * Author: Nicolas Jager 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | #ifndef _AVATARMANIPULATION_H 21 | #define _AVATARMANIPULATION_H 22 | 23 | #include 24 | #include 25 | #include 26 | 27 | #include "accountinfopointer.h" 28 | 29 | namespace lrc 30 | { 31 | namespace api 32 | { 33 | class AVModel; 34 | } 35 | } 36 | 37 | G_BEGIN_DECLS 38 | 39 | #define AVATAR_MANIPULATION_TYPE (avatar_manipulation_get_type ()) 40 | #define AVATAR_MANIPULATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AVATAR_MANIPULATION_TYPE, AvatarManipulation)) 41 | #define AVATAR_MANIPULATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), AVATAR_MANIPULATION_TYPE, AvatarManipulation)) 42 | #define IS_AVATAR_MANIPULATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AVATAR_MANIPULATION_TYPE)) 43 | #define IS_AVATAR_MANIPULATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), AVATAR_MANIPULATION_TYPE)) 44 | 45 | 46 | typedef struct _AvatarManipulation AvatarManipulation; 47 | typedef struct _AvatarManipulationClass AvatarManipulationClass; 48 | 49 | /** 50 | * AvatarManipulationState: 51 | * @AVATAR_MANIPULATION_STATE_CURRENT: The initial state. The widget will display the current 52 | * or the default avatar, with the possible actions being to start the camera (if available) to 53 | * take a new photo) or to select an existing image. 54 | * @AVATAR_MANIPULATION_STATE_PHOTO: The state in which the camera is on and the video is being 55 | * shown. The possible actions are to take a snapshot or to return to the previous state. 56 | * @AVATAR_MANIPULATION_STATE_EDIT: The state after selecting a new image (or snapping a photo). The 57 | * user must select the square area they wish to use for the avatar. The possible actions are to 58 | * confirm the selection or to return to the previous state. 59 | */ 60 | typedef enum 61 | { 62 | AVATAR_MANIPULATION_STATE_CURRENT, 63 | AVATAR_MANIPULATION_STATE_PHOTO, 64 | AVATAR_MANIPULATION_STATE_EDIT 65 | } AvatarManipulationState; 66 | 67 | 68 | GType avatar_manipulation_get_type (void) G_GNUC_CONST; 69 | GtkWidget *avatar_manipulation_new (AccountInfoPointer const & accountInfo, lrc::api::AVModel* avModel); 70 | 71 | /* used from the account creation wizard */ 72 | GtkWidget *avatar_manipulation_new_from_wizard(lrc::api::AVModel* avModel); 73 | void avatar_manipulation_wizard_completed(AvatarManipulation *); 74 | gchar* avatar_manipulation_get_temporary (AvatarManipulation *view); 75 | 76 | G_END_DECLS 77 | 78 | #endif /* _AVATARMANIPULATION_H */ 79 | -------------------------------------------------------------------------------- /ui/chatview.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 27 | 28 | False 29 | 200 30 | 300 31 | 32 | 33 | True 34 | False 35 | vertical 36 | 10 37 | 38 | 39 | True 40 | center 41 | Choose plugin 42 | 43 | 44 | 45 | 46 | True 47 | True 48 | in 49 | 200 50 | fill 51 | 52 | 53 | True 54 | True 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | True 65 | go-previous-symbolic 66 | 67 | 68 | 69 | True 70 | /net/jami/JamiGnome/invite 71 | 72 | 73 | Send Invitation 74 | 75 | 76 | 77 | 78 | True 79 | /net/jami/JamiGnome/call_start 80 | 81 | 82 | True 83 | /net/jami/JamiGnome/audio_only_call_start 84 | 85 | 86 | -------------------------------------------------------------------------------- /src/client_options.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2013-2022 Savoir-faire Linux Inc. 3 | * Author: Tristan Matthews 4 | * Author: Stepan Salenikovich 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 | */ 20 | 21 | #include "client_options.h" 22 | 23 | #include "config.h" 24 | #include "client.h" 25 | #include 26 | #include 27 | #include 28 | 29 | G_GNUC_NORETURN static gboolean 30 | option_version_cb(G_GNUC_UNUSED const gchar *option_name, 31 | G_GNUC_UNUSED const gchar *value, 32 | G_GNUC_UNUSED gpointer data, 33 | G_GNUC_UNUSED GError **error) 34 | { 35 | g_print("%s\n", VERSION); 36 | exit(EXIT_SUCCESS); 37 | } 38 | 39 | static gboolean 40 | option_debug_cb(G_GNUC_UNUSED const gchar *option_name, 41 | G_GNUC_UNUSED const gchar *value, 42 | G_GNUC_UNUSED gpointer data, 43 | G_GNUC_UNUSED GError **error) 44 | { 45 | g_setenv("G_MESSAGES_DEBUG", "all", TRUE); 46 | g_setenv("CHATVIEW_DEBUG", "true", TRUE); 47 | g_debug("debug enabled"); 48 | return TRUE; 49 | } 50 | 51 | static gboolean 52 | option_restore_cb(G_GNUC_UNUSED const gchar *option_name, 53 | G_GNUC_UNUSED const gchar *value, 54 | G_GNUC_UNUSED gpointer data, 55 | G_GNUC_UNUSED GError **error) 56 | { 57 | GApplication *client = g_application_get_default(); 58 | if (IS_CLIENT(client)) 59 | client_set_restore_main_window_state(CLIENT(client), TRUE); 60 | return TRUE; 61 | } 62 | 63 | static const GOptionEntry all_options[] = { 64 | {"version", 'v', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, option_version_cb, NULL, NULL}, 65 | {"debug", 'd', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, option_debug_cb, N_("Enable debug"), NULL}, 66 | {"restore-last-window-state", 'r', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, option_restore_cb, 67 | N_("Restores the hidden state of the main window (only applicable to the primary instance)"), NULL}, 68 | {NULL} /* list must be NULL-terminated */ 69 | }; 70 | 71 | #if GLIB_CHECK_VERSION(2,40,0) 72 | void 73 | client_add_options(GApplication *app) { 74 | /* NOTE: using this function, the options do not get translated in glib versions <2.45 due to 75 | * bug 750322: https://bugzilla.gnome.org/show_bug.cgi?id=750322 76 | */ 77 | g_application_add_main_option_entries(app, all_options); 78 | } 79 | 80 | #else 81 | GOptionContext * 82 | client_options_get_context() 83 | { 84 | GOptionContext *context = g_option_context_new(_("- GNOME client for Jami")); 85 | g_option_context_set_ignore_unknown_options(context, TRUE); 86 | g_option_context_add_main_entries(context, all_options, PACKAGE_NAME); 87 | g_option_context_add_group(context, gtk_get_option_group(TRUE)); 88 | return context; 89 | } 90 | #endif 91 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Jami client Gnome 2 | 3 | [![Build Status](https://jenkins.jami.net/buildStatus/icon?job=client-gnome)](https://jenkins.jami.net/job/client-gnome/) 4 | 5 | Jami-client-gnome is a Jami client written in GTK+3. It uses libRingClient to 6 | communicate with the Jami daemon and for all of the underlying models and their 7 | logic. Ideally Jami-client-gnome should only contain UI related code and any 8 | wrappers necessary for interacting with libRingClient. 9 | 10 | Packages for Debian/Ubuntu/Fedora can be found at https://jami.net/ 11 | 12 | More info about the Jami project and the clients can be found on our Gitlab's instance: 13 | https://git.jami.net/ 14 | 15 | GNU Jami welcomes contribution from everyone. See [CONTRIBUTING.md](CONTRIBUTING.md) for help getting started. 16 | 17 | # Setting up your environment 18 | 19 | ## Requirements 20 | 21 | - Jami daemon 22 | - libRingClient 23 | - GTK+3 (3.10 or higher) 24 | - Qt5 Core 25 | - X11 26 | - gnome-icon-theme-symbolic (certain icons are used which other themes might be missing) 27 | - A font with symbols U+1F4DE and U+1F57D (used in some messages) 28 | - libnotify (optional, if you wish to receive desktop notifications of incoming calls, etc) 29 | - gettext (optional to compile translations) 30 | 31 | On Debian/Ubuntu these can be installed by: 32 | ```bash 33 | sudo apt-get install g++ cmake libgtk-3-dev qtbase5-dev libclutter-gtk-1.0-dev gnome-icon-theme-symbolic libnotify-dev gettext 34 | ``` 35 | 36 | On Fedora: 37 | ```bash 38 | sudo dnf install gcc-c++ cmake gtk3-devel qt5-qtbase-devel clutter-gtk-devel gnome-icon-theme-symbolic libnotify-devel gettext 39 | ``` 40 | 41 | The build instructions for the daemon and libRingClient can be found in their 42 | respective repositories. See Gerrit: 43 | - https://gerrit-ring.savoirfairelinux.com/#/admin/projects/ 44 | 45 | 46 | ## Compiling 47 | 48 | In the project root dir: 49 | ```bash 50 | mkdir build 51 | cd build 52 | cmake .. 53 | make 54 | ``` 55 | 56 | You can then simply run `./jami-gnome` from the build directory 57 | 58 | ## Installing 59 | 60 | If you're building the client for use (rather than testing of packaging), it is 61 | recommended that you install it on your system, eg: in `/usr`, `/usr/local`, or 62 | `/opt`, depending on your distro's preference to get full functionality such as 63 | desktop integration. In this case you should perform a 'make install' after 64 | building the client. 65 | 66 | 67 | ## Building without installing Jami daemon and libRingClient 68 | 69 | It is possible to build ring-client-gnome without installing the daemon and 70 | libRingClient on your system (eg: in `/usr` or `/usr/local`): 71 | 72 | 1. build the daemon 73 | 2. when building libRingClient, specify the location of the daemon lib in the 74 | cmake options with -DRING_BUILD_DIR=, eg: 75 | `-DRING_BUILD_DIR=/home/user/ring/daemon/src` 76 | 3. to get the proper headers, we still need to 'make install' libRingClient, but 77 | we don't have to install it in /usr, so just specify another location for the 78 | install prefix in the cmake options, eg: 79 | `-DCMAKE_INSTALL_PREFIX=/home/user/ringinstall` 80 | 4. now compile libRingClient and do 'make install', everything will be installed 81 | in the directory specified by the prefix 82 | 4. now we just have to point the client to the libRingClient cmake module during 83 | the configuration: 84 | `-DLibRingClient_DIR=/home/user/ringinstall/lib/cmake/LibRingClient` 85 | 86 | 87 | ## Debugging 88 | 89 | For now, the build type of the client is "Debug" by default, however it is 90 | useful to also have the debug symbols of libRingClient. To do this, specify this 91 | when compiling libRingClient with `-DCMAKE_BUILD_TYPE=Debug` in the cmake 92 | options. 93 | 94 | ## Generating marshals.* 95 | 96 | ``` 97 | glib-genmarshal --header marshals.list > marshals.h 98 | glib-genmarshal --include-header=marshals.h --body marshals.list > marshals.cpp 99 | ``` -------------------------------------------------------------------------------- /src/video/video_widget.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2022 Savoir-faire Linux Inc. 3 | * Author: Stepan Salenikovich 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | #ifndef __VIDEO_WIDGET_H__ 21 | #define __VIDEO_WIDGET_H__ 22 | 23 | #include 24 | #include