diff --git a/AUTHORS b/AUTHORS index f95ca68..186c60c 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,2 +1,2 @@ David Michael - All files included in Window Merge versions 0.1 to 0.2 + All files included in Window Merge versions 0.1 to 0.3 diff --git a/BUGS b/BUGS index 89070cc..1809eb8 100644 --- a/BUGS +++ b/BUGS @@ -8,14 +8,7 @@ The issues outlined below are all the problems I have encountered in my own extremely limited testing of this plugin. This file also serves as a to-do list for myself with some methods to consider for fixing the problems. -For a listing of theoretical issues that other GTK plugins could experience due -to this plugin, grep the C files for "FRAGILE". These comments identify points -where some assumptions were made about the GTK widget structure. For example, -the Buddy List menu bar has no explicit pointer in the structure, so it is -assumed to be the first child element of main_vbox, but another plugin could -have changed its location. - -This file was last revised for distribution with version 0.2. +This file was last revised for distribution with version 0.3. The following is the list of known issues with the plugin, sorted approximately @@ -23,31 +16,23 @@ from most troublesome to least. * There are a few ways to cause Pidgin to segfault from messing with the dummy conversation's tab (dragging it into itself, etc.). This is mostly because - the conversation UI doesn't have an active_conv. - - - Ideally, get the PIDGIN_CONVERSATION(PurpleConversation) macro to return - NULL when given NULL in the mainline Pidgin code, and add any other - necessary sanity checks in their gtkconv.c callback functions. + the conversation UI doesn't have an active_conv, which some functions use. - Trying to fake the active_conv would cause all sorts of other troubles that - are circumvented by setting it to NULL. Still, it's on the radar. + are circumvented by setting it to NULL. - - Intercepting GTK events attempting to modify the dummy page is a possible + - Intercepting any GTK events interacting with the dummy tab is a possible solution, but it will require a slew of callbacks to cancel user actions. I imagine most users will have the tab positions at the top which will hide them automatically when there is only one conversation, avoiding this issue. -* Now that I've taken the time to attempt to run the plugin on Windows, there - seem to be issues related to disabling the plugin. Widgets aren't redrawn - correctly, etc. The issues seem to disappear if the plugin is re-enabled. I - am not quite certain where to begin with these problems, as they do not exist - on GNU/Linux systems. + + Pidgin ticket #15062 has a patch to allow safely reordering the dummy tab. * Several cursor movement key bindings were disabled on HTML fields. This was done in order to enable tab switching and message retrieval, since the Buddy - List has an event handler that stops events which have a binding defined on a - focused HTML widget. + List window has an event handler that stops events which have a binding + defined on a focused HTML widget. - An alternative to skipping bindings would be to completely remove the Buddy List event handler, but that would cause other issues. (Control+B for bold @@ -55,9 +40,10 @@ from most troublesome to least. - The related functions in Pidgin are all static, so I can't call them from a wrapper function. The code in question could be duplicated, but I am very - much against plugins duplicating any part of the main project's code. It - seems the only feasible action is to file an issue in the Pidgin tracker. + much against plugins duplicating any part of the main project's code. + +* The buddy icon in the status box is positioned from the left of the window, + based on the Buddy List's width. This causes it to be drawn over the pane of + conversations when using the "left" position preference. -* The buddy icon in the Buddy List seems to calculate its position using the - width of the notebook and the position of the window. This causes it to be - drawn in odd locations when using the "left" position preference. + + Pidgin ticket #15046 has a patch to correct this. diff --git a/ChangeLog b/ChangeLog index ef82e57..4b422d0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,25 +1,139 @@ +2012-07-10 David Michael + + Updated project distribution, version 0.3 + +2012-07-06 David Michael + + * merge.c (pwm_split_conversation): Conditionally display the window. + + * merge.c (pwm_merge_conversation): Simplify registering accelerators. + (pwm_split_conversation): Simplify unregistering accelerators. + +2012-05-31 David Michael + + * utils.c (pwm_widget_replace): Initialize a boolean to stop a warning. + +2012-05-30 David Michael + + * merge.c (focus_in_event_cb): Add this handler to synthesize events. + (pwm_merge_conversation): Start simulating focus to the hidden window. + (pwm_split_conversation): Stop simulating focus to the hidden window. + + * merge.c: pwm_destroy_conversation -> pwm_split_conversation + (pwm_merge_conversation): Store the conversations' GtkWindow for later. + (pwm_split_conversation): Restore the window instead of destroying it. + (pwm_create_paned_layout): Create a placeholder for the conversations. + * plugin.c (plugin_unload): Use the new function name. + * window_merge.h: Update the function's prototype. + + * utils.c (pwm_widget_replace): Add a widget replacement function. + * window_merge.h: Define its prototype. + * merge.c (pwm_destroy_conversation): Replace (not reparent) notebooks. + (pwm_create_paned_layout): Use replacement for constructing the panes. + + * dummy.c (pwm_free_dummy_conversation): Remove the dummy tab first. + + * utils.c (pwm_store, pwm_fetch, pwm_clear, pwm_free, pwm_destroy): + Remove these function definitions entirely. + * window_merge.h: Remove the above functions' prototypes. + (pwm_store, pwm_fetch, pwm_clear): Define new convenience macros. + * merge.c: Remove prefixes from pointer names, and handle freeing. + * plugin.c: Likewise. + * dummy.c: Likewise. + +2012-05-29 David Michael + + * dummy.c: pwm_new_dummy_conversation -> pwm_init_dummy_conversation + (pwm_init_dummy_conversation): Hide the dummy struct from callers. + * merge.c (pwm_merge_conversation): Use the new function name and type. + * window_merge.h: Update the function's prototype. + + * plugin.c (conv_placement_by_blist): Try "last" placement if disabled. + +2012-05-08 David Michael + + * merge.c (pwm_merge_conversation): Use menutray's parent for menu bar. + +2012-05-07 David Michael + + * merge.c (notify_position_cb, notify_max_position_cb): + Use the signal data pointers instead of g_object_get_data. + (notify_max_position_cb, pwm_create_paned_layout): + Switch to g_object_connect and set the signal data pointers. + (pwm_create_paned_layout): Remove g_object_set_data on the panes. + + * merge.c (notify_position_cb, notify_max_position_cb): + Determine slider position based on Buddy List size instead of convs. + + * window_merge.h: Add global definitions for user-visible strings. + * plugin.h: Remove global definitions for user-visible strings. + +2012-04-29 David Michael + + * dummy.c (pwm_new_dummy_conversation): Zero-fill the dummy's struct. + +2012-04-19 David Michael + + * plugin.c (plugin_init) [ENABLE_NLS]: Initialize the text domain. + + * plugin.h: Add TRANSLATORS comments for documenting the POT file. + * plugin.c: Likewise. + * dummy.c: Likewise. + + * plugin.h: Remove most strings' configure-dependence for xgettext. + * plugin.c (info): Adjust the struct to mark strings for translation. + (plugin_init): Translate plugin property strings. + (plugin_load): Use the prefixed preference name string. + (get_plugin_pref_frame): Refactor strings to allow translator comments. + * dummy.c (pwm_new_dummy_conversation): Switch to a formatted string. + (pwm_show_dummy_conversation): Use the new prefixed name string. + + * plugin.h: Centralize i18n includes and CPP definitions. + * plugin.c: Remove unnecessary i18n include. + * dummy.c: Likewise. + + * plugin.h: Define a separate identifier for each preference. + * plugin.c (plugin_init): Initialize all preferences with new labels. + (plugin_load): Use the new layout pref label for connecting the signal. + (get_plugin_pref_frame): Use the layout label in the preferences frame. + * merge.c (pwm_merge_conversation): Use the new layout pref label. + (notify_position_cb, notify_max_position_cb): Use new size pref labels. + +2012-04-13 David Michael + + * dummy.c (pwm_show_dummy_conversation): Add a tab label and icon. + +2012-04-06 David Michael + + * merge.c (pwm_merge_conversation): Reorder the menutray widget. + +2012-03-28 David Michael + + * merge.c (pwm_create_paned_layout): Set "resize" child properties. + 2012-03-26 David Michael - * : Updated project distribution, 0.2 + Updated project distribution, version 0.2 - * merge.c (pwm_merge_conversation): Add conversation menu accel_groups - (pwm_destroy_conversation): Remove the accel_groups when finished + * merge.c (pwm_merge_conversation): Add conversation menu accel_groups. + (pwm_destroy_conversation): Remove the accel_groups when finished. 2012-03-24 David Michael - * merge.c (pwm_destroy_conversation,pwm_set_conv_menus_visible): - Added or rearranged some variables for uniformity in the file - (pwm_destroy_conversation): Replace Buddy List conversations on disable + * merge.c (pwm_destroy_conversation, pwm_set_conv_menus_visible): + Added or rearranged some variables for uniformity in the file. + + * merge.c (pwm_destroy_conversation): Spare conversations on disable. 2012-03-23 David Michael - * merge.c (pwm_merge_conversation): Skip some "move-cursor" bindings + * merge.c (pwm_merge_conversation): Skip some "move-cursor" bindings. 2012-03-22 David Michael - * merge.c (pwm_destroy_conversation): Unset window icons - * plugin.c (deleting_conversation_cb): Unset window icons + * merge.c (pwm_destroy_conversation): Unset window icons. + * plugin.c (deleting_conversation_cb): Unset window icons. 2012-03-16 David Michael - * : Initial project distribution, 0.1 + Initial project distribution, version 0.1 diff --git a/NEWS b/NEWS index 477c106..f535fa4 100644 --- a/NEWS +++ b/NEWS @@ -2,17 +2,42 @@ This file outlines broad user interface changes. For a list of more specific code modifications, see the ChangeLog file. For newly discovered problems with the software, see the BUGS file. + +* Updated Distribution of Window Merge 0.3 + +** Plugin preferences + +*** If the conversation placement preference was set to "Buddy List window" and + the plugin was then disabled, it will use the "Last created window" option. + +** Buddy List window + +*** When the plugin is disabled, the Buddy List and conversation panes are now + split into two independent windows (instead of closing and replacing). + +*** A label and icon have been added to the placeholder tab. + +*** The Buddy List pane should now remain at a fixed size when resizing the + window, even when it is the right or bottom pane. I.e. the conversation + pane should always be resized with the window. + +*** The notification icon in the menu bar has been reordered to remain right- + justified. This also makes the conversation menu items appear adjacent to + the Buddy List items. + +*** Message notifications are now cleared when the Buddy List is focused. + * Updated Distribution of Window Merge 0.2 ** Buddy List window -*** The window icon list will be unset when conversations are cloesd or the +*** The window icon list will be unset when conversations are closed or the plugin is disabled. This will cause the window to display the default icon of the application, which is what the Buddy List normally displays. -*** Several key events are now properly handled, including message retrieval - and conversation menu accelerators. +*** Several conversation keyboard events are now properly handled, including + message retrieval and menu accelerators. *** When disabling the plugin, conversations open in the Buddy List window will be run through conversation placement so they are not lost. diff --git a/README b/README index 92a7cbc..3ec5778 100644 --- a/README +++ b/README @@ -10,7 +10,7 @@ though package names such as "pidgin-window_merge" may be used, this plugin was not written and is not maintained by Pidgin developers. The plugin should be considered unsupported and unstable for the time being. -This file was last revised for distribution with version 0.2. +This file was last revised for distribution with version 0.3. PLUGIN OVERVIEW @@ -27,9 +27,9 @@ conversation placement preference that allows new conversations to be opened in the Buddy List by default. Please note that this plugin works by altering internal Pidgin data structures -in ways that were not intended by the Pidgin developers, and at this point, it -has received extremely limited testing. For these reasons, this plugin should -not be enabled in situations where receiving instant messages is critical. +in ways that were not intended by the Pidgin developers. For this reason, this +plugin should not be enabled in situations where receiving instant messages is +critical. DOCUMENTATION / PROJECT HISTORY @@ -67,16 +67,23 @@ necessary to build the plugin (run from this file's source directory): ./configure make -You can specify the libdir variable and run "make install" if desired, but the -plugin consists of only one file. It should have been built at the location -".libs/window_merge.so", and you will probably want to copy it to your user- -specific plugin directory "~/.purple/plugins/". On a modern GNU/Linux system: +If successful, the plugin should have been built at ".libs/window_merge.so". +This command will install the plugin for your own account: - install -Dpm 755 .libs/window_merge.so ~/.purple/plugins/window_merge.so + make install plugindir=~/.purple/plugins -Note that if configure specified to compile the project with MinGW, the output -file would be ".libs/window_merge.dll". This file can be placed either in the -"Application Data\.purple\plugins" or the "AppData\.purple\plugins" folder in -your home directory, depending on your version of Microsoft Windows. +Alternatively, run the following as root to install the plugin for all users: -More detailed build information can be found in the INSTALL file. + make install + +More information about build commands can be found in the INSTALL file. + +Note that if configure specified to compile the project for Microsoft Windows +with MinGW, the output file would be ".libs/window_merge.dll". + +This file can be placed in the folder "%AppData%\.purple\plugins" to install it +for your own account. (Create the "plugins" folder if it doesn't exist; enter +"%AppData%\.purple" directly into the Explorer address bar to find it.) + +To install it for all users, place "window_merge.dll" in the "plugins" folder +found at Pidgin's installation location. diff --git a/TODO b/TODO index 13c707b..23af92b 100644 --- a/TODO +++ b/TODO @@ -2,18 +2,28 @@ This file outlines a few ideas to implement or areas with room for improvement in the plugin. These items are not necessarily problems to be addressed; for those, see the BUGS file. -This file was last revised for distribution with version 0.2. +This file was last revised for distribution with version 0.3. In no particular order, the following are a few nice-to-have changes (maybe): -* The plugin theoretically supports multiple Buddy Lists (more or less), but - Pidgin itself seems to be lacking in this regard. +* Generalize the dummy conversation file so it is as independent of this plugin + as possible. While the dummy makes Pidgin a bit more volatile for intrepid + users, I've found it to be quite handy in using conversation notebooks almost + as if they were geniune GtkWidgets. This has helped in my experimenting with + other plugins that attach conversation areas all over the place. The next + item can be considered a milestone for this one. + +* Switch to GTK signals for handling the dummy conversation instead of using + Pidgin's signals. Pidgin/purple signals just don't cover all of the possible + scenarios thoroughly. The GtkNotebook page add/remove signals are a much + more efficient and rigorous solution. However, there are a handful of new + issues needing to be addressed in the transition. - Should the time come when an interface is added for managing multiple Buddy - Lists, the preferences of this plugin will likely change to be the default - settings of new windows. Perhaps a new sub-menu could be added to choose the - panes' orientation or whether to display panes at all on a given Buddy List. +* The plugin theoretically supports multiple Buddy Lists (more or less), but + Pidgin itself seems to be lacking in this regard. If Pidgin ever properly + supports multiple Buddy Lists, this plugin should provide an interface to + manage them independently. A submenu on the menu bar seems simple enough. * Find ways to properly handle code labeled with "XXX" comments. They are bits of code that just seem wrong for some reason or another. Unfortunately, most